目录
继续学习刘老师课程,课程链接和数据集下载链接在Day_one中有。
代码分享
import torch
import numpy as np
data = np.loadtxt('diabetes.csv.gz', delimiter=',', dtype=np.float32)
x_data = torch.from_numpy(data[:,:-1])
y_data = torch.from_numpy(data[:,[-1]])
class Model(torch.nn.Module): #神经网络定义
def __init__(self):
super(Model,self).__init__()
self.linear1 = torch.nn.Linear(8,32)
self.linear2 = torch.nn.Linear(32,16)
self.linear3 = torch.nn.Linear(16,4)
self.linear4 = torch.nn.Linear(4,1) #实验发现用四层网络结构,先升维再降维效果较好
self.active = torch.nn.ReLU()
self.sigmoid = torch.nn.Sigmoid() #激活函数结合两个函数,relu结果为0时无法计算交叉熵(ln0)
def forward(self, x):
x = self.active(self.linear1(x))
x = self.active(self.linear2(x))
x = self.active(self.linear3(x))
x = self.sigmoid(self.linear4(x)) #最后一层使用sigmoid函数激活
return x
model = Model()
criterion = torch.nn.BCELoss(size_average = True)
optimizer = torch.optim.SGD(model.parameters(),lr=0.05) #损失函数和优化器
for epoch in range(100000):
y_pred = model(x_data) #没有使用mini—batch
loss = criterion(y_pred, y_data)
print(epoch, loss.item())
optimizer.zero_grad()
loss.backward()
optimizer.step()
总结
1、在使用sigmoid函数时,先直接用x = torch.nn.Sigmoid(self.linear4(x))会报错,因为这是一个类,应该先将类实例化。
2、只是简单的测试,没有划分测试集,就训练集上的loss来看,四层网络结构效果比三层结构更好。
3、欢迎补充纠正。