tjdnbj 2024-01-27 11:00 采纳率: 41.2%
浏览 4

深度学习线性回归基础问题询问2

以下是我的代码
想问一下为什么出现了如下图所示的错误呢?该如何修改代码呢?

img


```python
#引入各种库
import matplotlib_inline
import torch
torch.set_default_tensor_type(torch.DoubleTensor)
from IPython import display
from matplotlib import pyplot as plt
import numpy as np
import random
#生成数据集
num_inputs=2#特征数为2
num_examples=1000#设训练数据集样本数为1000
true_w=[2,-3,4]#真实权重
true_b=4.2#真实偏差
features=torch.from_numpy(np.random.normal(0,1,(num_examples,num_inputs)))
#y(标签label)=x(特征feature)w(权重)+b(偏差)
labels=true_w[0]*features[:,0]+true_w[1]*features[:,1]+true_b
#+e(噪声项,服从均值为0、标准差为0.01的正态分布)
labels+=torch.from_numpy(np.random.normal(0,0.01,size=labels.size()))
#读取数据
import torch.utils.data as Data
batch_size=10
#将训练数据集的特征和标签组合
dataset=Data.TensorDataset(features,labels)
#随机读取小批量
data_iter=Data.DataLoader(dataset,batch_size,shuffle=True)
#读取并打印第一个小批量数据样本
for X,y in data_iter:
    print(X,y)
    break
#定义模型
import torch.nn as nn
class LinearNet(nn.Module):#LinearNet类继承nn.Module
    def __init__(self,n_feature):
        super(LinearNet,self).__init__()
        #就是对继承自父类nn.Module的属性进行初始化。而且是用nn.Module的初始化方法来初始化继承的属性。
        self.linear=nn.Linear(n_feature,1)
        #foward定义向前传播
    def forward(self,x):
         y=self.linear(x)
         return y

net=LinearNet(num_inputs)
print(net)#打印出网络的结构
#初始化模型参数
from torch.nn import init
init.normal_(net[0].weight,mean=0,std=0.01)
init.constant_(net[0].bias,val=0)
#定义损失函数
loss=nn.MSELoss
#定义优化算法
import torch.optim as optim
optimizer=optim.SGD(net.parameters(),lr=0.03)
print(optimizer)
#训练模型
num_epochs=3
for epoch in range(1,num_epochs+1):
    for X,y in data_iter:
        output=net(X)
        l=loss(output,y.view(-1,1))
        optimizer.zero_grad()
        l.backward()
        optimizer.step()
    print('epoch %d,loss: %f' %(epoch,l.item()))


  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2024-01-27 12:13
    关注

    【以下回答由 GPT 生成】

    问题标题:深度学习线性回归基础问题询问2
    问题标签: 深度学习
    问题内容(包含代码):
    1. 错误描述:代码中可能存在的错误是损失函数的定义出现了问题。在初始化损失函数时,未实例化MSELoss,而是直接赋值。这会导致在计算损失值时出现错误。另外,初始化参数的方式也不正确,应该是net.linear.weight而不是net[0].weight,同理对net.linear.bias进行初始化,而不是net[0].bias。
    
    2. 可能的解决方案:
    ```python
    # 将代码中的损失函数定义修改为
    # 定义损失函数
    loss = nn.MSELoss()
    
    # 将初始化模型参数的方式修改为
    # 初始化模型参数
    init.normal_(net.linear.weight, mean=0, std=0.01)
    init.constant_(net.linear.bias, val=0)
    

    以上修改应当能够解决代码中的问题。如果这些修改之后仍然有问题,可能需要进一步检查其他部分的代码。希望这些修改能够帮助你解决问题。 ```



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 修改了问题 1月27日
  • 创建了问题 1月27日

悬赏问题

  • ¥15 通过AT指令控制esp8266发送信息
  • ¥15 有哪些AI工具提供可以通过代码上传EXCEL文件的API接口,并反馈分析结果
  • ¥15 二维装箱算法、矩形排列算法(相关搜索:二维装箱)
  • ¥20 nrf2401上电之后执行特定任务概率性一直处于最大重发状态
  • ¥15 二分图中俩集合中节点数与连边概率的关系
  • ¥20 wordpress如何限制ip访问频率
  • ¥15 自研小游戏,需要后台服务器存储用户数据关卡配置等数据
  • ¥15 请求解答odoo17外发加工某工序的实操方法
  • ¥20 IDEA ssm项目 跳转页面报错500
  • ¥20 系统直接进入应急模式了,请教一下,人要裂开了