我正在尝试制作读取图像的机器学习模型。但在第一个历元结束时出错。
tensorflow.python.framework.errors_impl.InvalidArgumentError:要整形的输入是一个值为147456的张量,但请求的形状需要12544的倍数有什么想法吗?
validation_generator = ImageDataGenerator(rescale=1./255)
train_data_gen = train_generator.flow_from_dataframe(
dataframe=df,
#directory="CatDog",
x_col="images",
y_col="label",
class_mode="binary",
batch_size=64,
target_size=(128,128))
validation_data_gen = validation_generator.flow_from_dataframe(
dataframe=df,
#directory='',
x_col="images",
y_col="label",
class_mode="binary",
batch_size=64,
target_size=(64,64))
from keras.models import Sequential
from keras.layers import Dense, Conv2D, MaxPooling2D, Dropout, Flatten
model = Sequential([
Conv2D(16, (3,3), activation='relu', input_shape=(128,128,3)),
MaxPool2D((2,2)),
Conv2D(32, (3,3), activation='relu'),
MaxPool2D((2,2)),
Conv2D(64, (3,3), activation='relu'),
MaxPool2D((2,2)),
Flatten(),
Dense(512, activation='relu'),
Dense(1, activation='sigmoid')
])
model.compile(optimizer='adam',
loss='binary_crossentropy',
metrics=['accuracy'])
model.summary()
history = model.fit(train_data_gen, epochs=2, validation_data=validation_data_gen)
我不确定是否有完整的代码。已经出现了一些问题。
- 第1行:
rescale=1./255
CCD_ 2将使您的图像从";0~255 8位整数图像";至";0~1浮动图像";。因此,请确保您的培训数据、验证数据和测试数据的格式相同。也就是说,您可能还需要重新缩放train_generator - 第19行:
target_size=(64,64)
最好使用相同的target_size
。如果图像的原始大小足够大,请将target_size
设置为不小于模型的input_shape
,以避免多次调整图像大小。它可能会丢失您的一些图像信息 - 第33行:
Dense(1, activation='sigmoid')
最后一个Dense layer
通常是您的分类层。设置Dense(1, ...)
意味着您的标签编号仅为1。如果要将图像分类为猫或狗,可以设置Dense(2, ...)
。activation='sigmoid'
会给你一个模型认为图像与标签匹配程度的百分比。您可能需要使用activation='softmax'
来给出分类结果
基本上,我猜,错误是由错误的密集(单位,…(引起的。