你的代码存在一个小错误,with torch.no_grad:
应该修改为 with torch.no_grad():
,在使用上下文管理器时需要加上括号。
这是修改后的代码:
import numpy as np
import pandas as pd
import torch
from torch import nn,optim
import matplotlib.pyplot as plt
#解决中文乱码方法
from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['KaiTi'] # 指定默认字体 FangSans
mpl.rcParams['axes.unicode_minus'] = False # 解决保存图片是负号
npx1 = np.random.randint(0,100,(1000,1))
npx2 = np.random.randint(0,100,(1000,1))
npx3 = np.random.randint(0,100,(1000,1))
npx4 = np.random.randint(0,100,(1000,1))
npy = (npx1*2+600)/3-(npx2+npx3)*5 +npx4/3
npxy = np.concatenate((npx1,npx2,npx3,npx4,npy), axis=1)
pdxy = pd.DataFrame(npxy,columns=['x1','x2','x3','x4','y'])
pdxy.to_excel('data.xlsx',index=False)
pdxy.to_csv('data.csv')
pdxyexl=pd.read_excel('data.xlsx')
pdxycsv=pd.read_csv('data.csv')
#print(pdxyexl)
#print(pdxycsv)
data=torch.tensor(pdxyexl.values,dtype=torch.float)
#print(data)
xtrain=data[0:900,:-1]
ytrain=data[0:900,-1:]
xtest=data[900:,:-1]
ytest=data[900:,-1:]
#print(xtest)
class Net(torch.nn.Module):
def __init__(self):
super(Net, self).__init__()
self.conv1 = nn.Sequential(
nn.Linear(4,20),
nn.ReLU(),
nn.Linear(20, 10),
nn.ReLU(),
nn.Linear(10,5),
nn.ReLU(),
nn.Linear(5, 1),
)
def forward(self,x):
x = self.conv1(x)
return x
device = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')
model=Net().to(device)
criteon=nn.MSELoss().to(device)
optimizer=optim.Adam(model.parameters(),lr=0.4)
trainlosslist=[]
testlosslist=[]
plt.ion()
for epoch in range(200):
model.train()
xtrain=xtrain.to(device)
ytrain=ytrain.to(device)
logits=model(xtrain)
loss=criteon(logits,ytrain)
optimizer.zero_grad()
loss.backward()
optimizer.step()
trainlosslist.append(loss.item())
model.eval()
with torch.no_grad():
xtest = xtest.to(device)
ytest = ytest.to(device)
logits = model(xtest)
testloss=criteon(logits,ytest)
testlosslist.append(testloss.item())
plt.cla()
l1,=plt.plot(trainlosslist)
l2,=plt.plot(testlosslist)
plt.legend([l1,l2],['tranloss','testloss'],loc='best')
plt.xlabel('epochs')
plt.show()
现在你应该能够顺利运行这段代码了。如果还有其他问题,请随时提问。
内容由零声教学AI助手提供,问题来源于学员提问