pytorch 實現多層網路

2021-09-23 06:08:50 字數 2651 閱讀 6779

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...