新人求助一下大佬,代码老是出错
pytorch吧
全部回复
仅看楼主
level 2
shineTencole 楼主
import torch
import numpy as np
import copy
import time
import pandas as pd
from torchvision import transforms
from torch.optim import Adam
import torch.utils.data as Data
import torch.nn as nn
from torchvision.transforms import ToTensor, Lambda, Compose
import matplotlib.pyplot as plt
#数据的输入并转化为tensor向量
Triandata1 =torch.Tensor(np.loadtxt(open('C:\\Users\\80679\\Desktop\\Trian1.csv', "rb"), delimiter =",", skiprows = 0))
Triandata2 =torch.Tensor(np.loadtxt(open('C:\\Users\\80679\\Desktop\\Trian2.csv', "rb"), delimiter =",", skiprows = 0))
Triandata3 =torch.Tensor(np.loadtxt(open('C:\\Users\\80679\\Desktop\\Trian3.csv', "rb"), delimiter =",", skiprows = 0))
Triandata4 =torch.Tensor(np.loadtxt(open('C:\\Users\\80679\\Desktop\\Trian4.csv', "rb"), delimiter =",", skiprows = 0))
Triandata5 =torch.Tensor(np.loadtxt(open('C:\\Users\\80679\\Desktop\\Trian5.csv', "rb"), delimiter =",", skiprows = 0))
Triandata6 =torch.Tensor(np.loadtxt(open('C:\\Users\\80679\\Desktop\\Trian6.csv', "rb"), delimiter =",", skiprows = 0))
Testdata1 =torch.Tensor(np.loadtxt(open('C:\\Users\\80679\\Desktop\\Test1.csv', "rb"), delimiter =",", skiprows = 0))
Testdata2 =torch.Tensor(np.loadtxt(open('C:\\Users\\80679\\Desktop\\Test2.csv', "rb"), delimiter =",", skiprows = 0))
Testdata3 =torch.Tensor(np.loadtxt(open('C:\\Users\\80679\\Desktop\\Test3.csv', "rb"), delimiter =",", skiprows = 0))
Predictdata1 =torch.Tensor(np.loadtxt(open('C:\\Users\\80679\\Desktop\\output1.1.csv', "rb"), delimiter =",", skiprows = 0))
Predictdata2 =torch.Tensor(np.loadtxt(open('C:\\Users\\80679\\Desktop\\output2.1.csv', "rb"), delimiter =",", skiprows = 0))
Predictdata3 =torch.Tensor(np.loadtxt(open('C:\\Users\\80679\\Desktop\\output3.1.csv', "rb"), delimiter =",", skiprows = 0))
Td1=torch.Tensor(np.vstack((Triandata1,Triandata2,Triandata3))).reshape(3,200,200)
Td2=torch.Tensor(np.vstack((Triandata4,Triandata5,Triandata6))).reshape(3,200,200)
Td3=torch.Tensor(np.vstack((Testdata1,Testdata2,Testdata3))).reshape(3,200,200)
Trd=torch.Tensor(np.vstack((Td1,Td2,Td3)).flatten()).reshape(3,3,200,200)
Pred=torch.Tensor(np.vstack((Predictdata1,Predictdata2,Predictdata3)).flatten()).reshape(3,40000)
#定义一个数据加载器
class ConNet(nn.Module):
def __init__(self):
super(ConNet, self).__init__()
# 定义卷积层,由以下众多层构成
self.ConNet1 = nn.Sequential(
nn.Conv2d(
in_channels=3,
out_channels=24,
kernel_size=3,
stride=1,
padding=1,
),
# ReLU激活函数
nn.ReLU(),
# 全连接层
nn.AvgPool2d(
kernel_size=2,
stride=2,
),
)
self.ConNet2 =nn.Sequential(
nn.Conv2d(24,48,3,1,0),
nn.ReLU(),
nn.AvgPool2d(2,2)
)
self.classifier=nn.Sequential(
nn.Linear(48*49*49,256),
nn.ReLU(),
nn.Linear(256,128),
nn.ReLU(),
nn.Linear(128,40000)
)
def forward(self,x):
x=self.ConNet1(x)
x=self.ConNet2(x)
x=x.view(x.size(0),-1)
output=self.classifier(x)
return output
connet=ConNet()
print(connet)
#定义训练函数
def train_n(model,trndata,predictdata,lossfun,opz,t_times=5):
b_times=len(trndata)
tb_times=2
usm=copy.deepcopy(model.state_dict())
b_a=0.0
tla=[]
taa=[]
vla=[]
vaa=[]
s=time.time()
for ep in range(t_times):
print('EP {}/{}'.format(ep,t_times-1))
print('-'*10)
tl=0.0
tc=0
tn=0
vl=0.0
vc=0
vn=0
for step,ksg in enumerate(trndata):
if step <tb_times:
bg=ksg.reshape(1,3,200,200)
gh=predictdata[step]
model.train()
output=model(bg)
plb=torch.argmax(output,1)
loss=lossfun(output, gh)
opz.zero_grad()
loss.backward()
opz.step()
tl=tl+loss.item()*bg.size(0)
tc=tc+torch.sum(plb==gh.data)
tn=tn+bg.size(0)
else:
bg=ksg.reshape(1,3,200,200)
gh=predictdata[step]
model.eval()
output=model(bg)
plb=torch.argmax(output,1)
loss=lossfun(output,gh)
vl=vl+loss.item()*bg.size(0)
vc=vc+torch.sum(plb==gh.data)
vn=vn+bg.size(0)
tla.append(tl/tn)
taa.append(tc.double().item()/tn)
vla.append(vl/vn)
vaa.append(vc.double().item()/vn)
print('{ } train loss:{:.4f} train accuracy:{:.4f}'.format(ep,tla[-1],taa[-1]))
print('{ } val loss:{:.4f} val accuracy:{:.4f}'.format(ep, vla[-1], vaa[-1]))
if vaa[-1]>b_a:
b_a=vaa[-1]
usm=copy.deepcopy(model.state_dict())
tu=time.time()-s
print("train and val complete in{:.0f}m {:.0f}s".format(tu//60,tu%60))
model.load_state_dict(usm)
tp=pandas.DataFrame(
data={"ep":range(t_times),
"train loss all":tla,
"val loss all":vla,
"train acc all":taa,
"val acc all":vaa})
return model,tp
#进行训练
opz=torch.optim.Adam(connet.parameters(), lr=1e-3)
lossfun=nn.CrossEntropyLoss()
connet,tp=train_n(connet,Trd,Pred,lossfun,opz,t_times=5)
最近刚使用,代码还不是很会写,写了四天,人都傻了,但还是出错了,错误如图
有没有大佬知道怎么解决
2021年08月03日 15点08分 1
level 2
shineTencole 楼主
代码大多是我按书上的写的,但是数据集我没有FashionMNIST,而是自己做的三张三通道200*200的图片数据
2021年08月03日 15点08分 2
数据加载器是不是搞错了,把40000张图片一次全进去还是一次一张呢,你看他的报错
2021年09月23日 09点09分
level 2

2021年08月17日 13点08分 3
1