深度学习基础7:Multiple Dimension Input
·
import torch
import numpy as np
xy = np.loadtxt('diabetes.csv.gz', delimiter=',', dtype=np.float32)
x_data = torch.from_numpy(xy[:, 0:-1]) # 前8列作为特征
y_data = torch.from_numpy(xy[:, [-1]]) # 最后一列作为标签
class Model(torch.nn.Module):
def __init__(self):
super(Model, self).__init__()
self.linear1 = torch.nn.Linear(8, 6) # 输入层->隐藏层1
self.linear2 = torch.nn.Linear(6, 4) # 隐藏层1->隐藏层2
self.linear3 = torch.nn.Linear(4, 1) # 隐藏层2->输出层
self.sigmoid = torch.nn.Sigmoid() # Sigmoid激活函数
# 前向传播步骤:
# ①输入数据通过第一个线性变换 + Sigmoid激活
# ②结果通过第二个线性变换 + Sigmoid激活
# ③最后通过第三个线性变换 + Sigmoid激活,输出概率值
def forward(self, x):
x = self.sigmoid(self.linear1(x))
x = self.sigmoid(self.linear2(x))
x = self.sigmoid(self.linear3(x))
return x
model = Model()
# criterion = torch.nn.BCELoss(size_average=True) # 二元交叉熵损失(已弃用)
criterion = torch.nn.BCELoss(reduction='mean') # 二元交叉熵损失函数(取平均)
optimizer = torch.optim.SGD(model.parameters(), lr=0.01) # SGD优化器
for epoch in range(1000):
y_pred = model(x_data) # 前向传播
loss = criterion(y_pred, y_data) # 计算损失
print("epoch:", epoch, "loss:", loss.item())
optimizer.zero_grad() # 梯度清零
loss.backward() # 反向传播(自动计算梯度)
optimizer.step() # 参数更新(自动使用梯度更新所有参数)
更多推荐
所有评论(0)