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

有没有大佬知道怎么解决
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)
最近刚使用,代码还不是很会写,写了四天,人都傻了,但还是出错了,错误如图

有没有大佬知道怎么解决









