pytorch实现简单神经网络

一个全连接的 ReLU 神经网络,一个隐藏层,没有 bias,用来从 x 预测 y。

题目要求:
  1. 用 pytorch 实现两层神经网络拟合。
  2. 两层线性层:
    h = W1 * x
    h_relu = relu(h)
    y = W2 * x
  3. 优化方法使用随机梯度下降(SGD)
  4. Loss 函数使用均方误差函数(MSE)
代码实现:
import torch
EPOCH = 500
LEARNING_RATE = 1e-6
N, D_in, H, D_out = 64, 1000, 100, 10
X = torch.randn(N, D_in)
y = torch.randn(N, D_out)
W1 = torch.randn(D_in, H, requires_grad=True)
W2 = torch.randn(H, D_out, requires_grad=True)

relu=torch.nn.ReLU()
loss_function=torch.nn.MSELoss()

for i in range(EPOCH):
    #前向传播
    #输入层->隐含层
    h=torch.mm(X,W1)
    h_relu=relu(h)
    #隐含层->输出层
    y_pred=torch.mm(h_relu,W2)

    #计算损失(误差)
    loss=loss_function(y_pred,y)
    if i%50==0:
        print('epoch:',i,'loss:',loss)

    #反向传播,优化方法(SGD)
    for xi,yi,yi_pred in zip(X,y,y_pred):
        #求导,通过backward函数
        xi=xi.unsqueeze(dim=0)
        hi=torch.mm(xi,W1)
        hi_relu = relu(hi)
        yi_pred = torch.mm(hi_relu, W2)
        lossi=loss_function(yi_pred,yi)
        lossi.backward()
        #更新权重
        W1=W1-LEARNING_RATE*W1.grad
        W1.retain_grad()
        W2=W2-LEARNING_RATE*W2.grad
        W2.retain_grad()

print("y:",y)
print("pred_y",y_pred)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值