Python 美国有线电视新闻网“pytorch”;预期四维权重[32,1,5,5]的四维输入,但得到的是大小为[16,64,64]的三维输入;

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

我是个新手。我正在尝试使用中文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], 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
x
C
x
H
x
W
=
16x1x64x64
,你最终得到的是一批形状
16x64x64

尝试:

#。。。
批次输入,批次标签=数据[0][:]到(设备)。类型(torch.float),数据[1][:]到(设备)
batch_inputs=batch_inputs[:,None,…]#显式添加单例通道维度
#向前传球
# ...