【发布时间】:2021-10-09 14:04:16
【问题描述】:
我已经开始使用来自here 的 MNIST 数据训练一个基本的 MLP 模型。下面是我实现模型的代码。
train = pd.read_csv(r"train.csv")
test = pd.read_csv(r"test.csv")
train_img_path = "./Images/train/"
test_img_path = "./Images/test/"
train_img = []
for img in train['filename']:
img_path = train_img_path+img
image = imread(img_path)
image = image/255
train_img.append(image)
train_img = np.array(train_img)
batch_size = 64
y_train = train['label']
from tensorflow.keras.utils import to_categorical
#y_train = to_categorical(y_train)
model = Sequential()
model.add(Dense(10, activation = 'relu'))
model.add(Dense(10, activation = 'relu'))
model.add(Dense(10, activation = 'softmax'))
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
model.fit(train_img, y_train, epochs=20, batch_size=batch_size)
在尝试根据这些数据拟合我的模型时,我收到错误 InvalidArgumentError: logits and labels must have the same first dimension, got logits shape [50176,10] and labels shape [64] 和 loss='sparse_categorical_crossentropy'。
有人建议在获得 one-hot 编码值后尝试使用 loss='categorical_crossentropy',这也会给出错误 ValueError: Shapes (None, 10) and (None, 28, 28, 10) are incompatible
我对如何在错误中获得形状 [50176,10](尽管示例为 49000)感到困惑。
我想我在形状上遗漏了一些东西。有人可以指导我哪里做错了以及如何解决这个问题。
编辑:我已经修改了我的代码,以从kerasfor_from_dataframe 中选择数据。但我仍然遇到同样的错误。
train_datagen = ImageDataGenerator(rescale=1./255)
test_datagen = ImageDataGenerator(rescale=1./255)
train_data = train_datagen.flow_from_dataframe(
dataframe=train,
directory='./Images/train',
x_col='filename',
y_col='label',
weight_col=None,
target_size=(28,28),
color_mode='grayscale',
class_mode='categorical',
batch_size=64
)
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
#model.summary()
model.fit(train_data, epochs=20)
【问题讨论】:
-
您是否尝试将
Flatten()层作为第一层添加到您的模型中? -
谢谢。只需添加
Flatten()层就可以了。那是因为我正在传递图像数据,因此应该使用它吗? -
是的,因为您的数据是 3 维的,包括图像的深度。
标签: python keras reshape tf.keras