以下是我的代码
想问一下为什么出现了如下图所示的错误呢?该如何修改代码呢?
```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()))