pytorch吧 关注:1,456贴子:2,583
  • 3回复贴,共1

新人求助一下大佬,代码老是出错

只看楼主收藏回复

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)
最近刚使用,代码还不是很会写,写了四天,人都傻了,但还是出错了,错误如图

有没有大佬知道怎么解决


1楼2021-08-03 23:46回复
    代码大多是我按书上的写的,但是数据集我没有FashionMNIST,而是自己做的三张三通道200*200的图片数据


    2楼2021-08-03 23:53
    收起回复
      2025-12-26 22:08:41
      广告
      不感兴趣
      开通SVIP免广告


      来自Android客户端3楼2021-08-17 21:32
      回复