神经网络结构:
1.第一层:单元数 = 特征数量
2.中间隐藏层:单元数 = 自行设置(层数和每层单元数都需要调参对比),每层单元数相同
3.最后一层:单元数 = 输出结果数量
训练神经网络:
--> 随机初始化参数
--> 正向传播,计算所有的hθ(x)
--> 计算代价函数J
--> 反向传播,计算所有偏导数
--> 数值检验,检验这些偏导数
--> 使用优化算法,最小化代价函数
简单的神经网络
import torch
import torch.nn as nn
# 定义单元信息
n_in, n_out, n_h, batch_size = 10, 1, 8, 10
# 定义数据
x = torch.randn(batch_size, n_in)
y = torch.tensor([[1.0], [1.0], [0.0], [0.0], [1.0], [0.0], [1.0], [1.0], [0.0], [1.0]])
# 定义模型
model = nn.Sequential(nn.Linear(n_in, n_h), nn.ReLU(), nn.Linear(n_h, n_out), nn.Sigmoid())
# 定义损失函数和优化器
criterion = torch.nn.MSELoss()
optimizer = torch.optim.SGD(model.parameters(), lr = 0.01) #SGD: Stochastic Gradient Descent
# 训练
for epoch in range(20):
y_pred = model(x)
loss = criterion(y_pred, y)
print('epoch:', epoch, ' loss:', loss.item())
optimizer.zero_grad() #重置梯度
loss.backward() #反向传播
optimizer.step() #更新权值
结果: