import torch
import torch.nn as nn
import torch.nn.init as init
import torch.nn.functional as f
import math
#讀取資料集
# pima-indians-diabetes資料集
import pandas as pd
import numpy as np
xy=pd.read_csv('/home/infisa/wjht/project/pytorch_practice/diabetes.csv',delimiter=',',dtype= np.float32)
#print(xy.head())
# print(type(xy))
xy_numpy = np.array(xy) #pandas轉為numpy 為了後面numpy轉tensor
# print(type(xy_numpy))
x=xy_numpy[:,0:-1] #x為768*8
y=xy_numpy[:,-1].reshape(-1,1) #為了讓其shape為768*1
#將numpy 轉為tensor
x_data=torch.tensor(torch.from_numpy(x))
y_data=torch.tensor(torch.from_numpy(y))
#檢視維度
print(x_data.shape) # torch.size([768, 8])
print(y_data.shape) # torch.size([768, 1])
class model(nn.module):
def __init__(self):
super(model,self).__init__()
#定義多層神經網路
self.fc1=torch.nn.linear(8,6)
self.fc2=torch.nn.linear(6,4)
self.fc3=torch.nn.linear(4,1)
def forward(self, x):
x=f.relu(self.fc1(x)) #8->6 第一層
x=f.dropout(x,p=0.5) #dropout 1
x=f.relu(self.fc2(x)) # 6->4 第二層
x=f.dropout(x,p=0.5) #dropout 2
y_pred=torch.sigmoid(self.fc3(x)) #4->1 ->sigmoid 第三層sigmoid層
return y_pred
def weight_init(m):
classname=m.__class__.__name__
if classname.find('linear')!=-1:
print('hi')
m.weight.data=torch.randn(m.weight.data.size()[0],m.weight.data.size()[1])
m.bias.data=torch.randn(m.bias.size())[0]
model=model()
criterion=torch.nn.bceloss() #定義損失函式 binary crosstripy
optimizer=torch.optim.sgd(model.parameters(),lr=0.01) #學習率設為0.01
loss=
print(x.shape)
for epoch in range(2000):
y_pred = model(x_data)
#計算誤差
loss = criterion(y_pred,y_data)
##prin(loss.item())
#每迭代1000次列印lost並記錄
if epoch%100 == 0:
print('[%d, %5d] loss: %.3f' %
(epoch + 1, 2000, loss.item()))
#梯度清零
optimizer.zero_grad()
#反向傳播
loss.backward()
#更新梯度
optimizer.step()
#由於**的是概率 所以需要將y_pred的值轉化為和y_data一致型別的。
# y_data 為1或0(浮點數) 對於二分類,sigmoid函式值大於0.5時為1, 小於0.5時為0。
for i in range(len(y_pred)):
if(y_pred[i]>0.5):
y_pred[i] = 1.0
else:
y_pred[i] = 0.0
#print(y_pred)
print((y_pred == y_data).sum().item()/len(y_data)) # torch.tensor.sum()函式
0.6510416666666666
用PyTorch實現多層網路
task4 2天 用pytorch實現多層網路 1.引入模組,讀取資料 2.構建計算圖 構建網路模型 3.損失函式與優化器 4.開始訓練模型 5.對訓練的模型 結果進行評估 參考 import torch import torchvision import torchvision.transform...
Task4 用PyTorch實現多層網路
1.引入模組,讀取資料 2.構建計算圖 構建網路模型 3.損失函式與優化器 4.開始訓練模型 5.對訓練的模型 結果進行評估 1 import torch.nn.functional as f 2import torch.nn.init as init 3import torch 4from tor...
Pytorch學習筆記 五 多層神經網路
本次設計乙個簡單的三層神經網路模型。上一章學習了乙個線性的分類模型。但如果資料集無法用一條線 乙個面進行分類呢?此時神經網路就有用武之地了。但是本次實驗還是用的上次的資料集,有效果就行 import torch import numpy as np o data 讀取資料 with open dat...