Python 美国有线电视新闻网“pytorch”;预期四维权重[32,1,5,5]的四维输入,但得到的是大小为[16,64,64]的三维输入;
我是个新手。我正在尝试使用中文mnist数据集来训练神经网络,如下代码所示。这是神经网络输入的问题还是我的代码中出现了其他问题。我尝试了很多方法来修复它,但它却显示出其他错误Python 美国有线电视新闻网“pytorch”;预期四维权重[32,1,5,5]的四维输入,但得到的是大小为[16,64,64]的三维输入;,python,pytorch,conv-neural-network,Python,Pytorch,Conv Neural Network,我是个新手。我正在尝试使用中文mnist数据集来训练神经网络,如下代码所示。这是神经网络输入的问题还是我的代码中出现了其他问题。我尝试了很多方法来修复它,但它却显示出其他错误 train_df = chin_mnist_df.groupby('value').apply(lambda x: x.sample(700, random_state=SEED)).reset_index(drop=True) x_train, y_train = train_df.iloc[:, :-2], trai
train_df = chin_mnist_df.groupby('value').apply(lambda x: x.sample(700, random_state=SEED)).reset_index(drop=True)
x_train, y_train = train_df.iloc[:, :-2], train_df.iloc[:, -2]
valid_df = chin_mnist_df.groupby('value').apply(lambda x: x.sample(200, random_state=SEED)).reset_index(drop=True)
x_valid, y_valid = valid_df.iloc[:, :-2], valid_df.iloc[:, -2]
test_df = chin_mnist_df.groupby('value').apply(lambda x: x.sample(100, random_state=SEED)).reset_index(drop=True)
x_test, y_test = test_df.iloc[:, :-2], test_df.iloc[:, -2]
train_ds = Dataset(x_train, y_train)
train_dataloader = torch.utils.data.DataLoader(train_ds, batch_size=16, shuffle=True)
valid_ds = Dataset(x_valid, y_valid)
valid_dataloader = torch.utils.data.DataLoader(valid_ds, batch_size=16, shuffle=True)
test_ds = Dataset(x_test, y_test)
test_dataloader = torch.utils.data.DataLoader(test_ds, batch_size=16, shuffle=True)
# Convolutional neural network (two convolutional layers)
class ConvNet(nn.Module):
def __init__(self):
super(ConvNet, self).__init__()
self.layer1 = nn.Sequential(
nn.Conv2d(1, 32, kernel_size=5, stride=1, padding=2),
nn.ReLU(),
nn.MaxPool2d(kernel_size=2, stride=2))
self.layer2 = nn.Sequential(
nn.Conv2d(32, 64, kernel_size=5, stride=1, padding=2),
nn.ReLU(),
nn.MaxPool2d(kernel_size=2, stride=2))
self.drop_out = nn.Dropout()
self.fc1 = nn.Linear(7 * 7 * 64, 1000)
self.fc2 = nn.Linear(1000, 15)
def forward(self, x):
out = self.layer1(x)
out = self.layer2(out)
out = out.reshape(out.size(0), -1)
out = self.drop_out(out)
out = self.fc1(out)
out = self.fc2(out)
return out
model = ConvNet()
klisi=[]
apoklisi=[]
apoklisi2=[]
klisi2=[]
olatalr=[]
criterion = nn.CrossEntropyLoss()
optimizer = torch.optim.Adam(model.parameters(), lr=learning_rate)
total_step = len(train_dataloader)
loss_list = []
acc_list = []
for epoch in range(num_epochs):
for i,data in enumerate(train_dataloader):#(images, labels)
batch_inputs, batch_labels = data[0][:].to(device).type(torch.float), data[1][:].to(device)
# Run the forward pass
outputs = model(batch_inputs)
loss = criterion(outputs, batch_labels)
您的训练图像是灰度图像。也就是说,它们只有一个通道(与彩色图像中的三个RGB颜色通道相反)。
它看起来像是你的
数据集(隐式地)这个单体维度,而不是有一批形状B
xC
xH
xW
=16x1x64x64
,你最终得到的是一批形状16x64x64
尝试:
#。。。
批次输入,批次标签=数据[0][:]到(设备)。类型(torch.float),数据[1][:]到(设备)
batch_inputs=batch_inputs[:,None,…]#显式添加单例通道维度
#向前传球
# ...