【发布时间】:2021-07-03 07:32:01
【问题描述】:
我正在尝试使用 tensoflow 制作图像分类器 CNN。我正在尝试使用ImageDataGenerator 加载数据集。像这样:
from tensorflow.keras.preprocessing.image import ImageDataGenerator
image_datagen = ImageDataGenerator(rescale=1/255)
IMAGE_DIMS = (200,200)
train_generator = image_datagen.flow_from_directory(
TRAIN_DIR,
target_size=IMAGE_DIMS,
batch_size=80,
class_mode="categorical",
shuffle=True
)
这是我的网络的样子:
model = keras.models.Sequential([
keras.layers.Conv2D(16,(3,3), input_shape=(200,200,1), activation='relu'),
keras.layers.MaxPooling2D(2, 2),
keras.layers.Conv2D(32,(3,3), activation='relu'),
keras.layers.MaxPooling2D(2, 2),
keras.layers.Conv2D(64,(3,3), activation='relu'),
keras.layers.MaxPooling2D(2, 2),
keras.layers.Flatten(),
keras.layers.Dense(units=128, activation="relu"),
keras.layers.Dense(units=64, activation="relu"),
keras.layers.Dense(units=16, activation="softmax")
])
model.compile(
optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy']
)
当我尝试通过以下方式将模型拟合到数据集时:
model.fit(
train_generator,
steps_per_epoch=4,
epochs=2
)
我收到此错误:
InvalidArgumentError: Can not squeeze dim[1], expected a dimension of 1, got 16
我对 TensorFlow 比较陌生,我不知道这里出了什么问题。我尝试过使用不同的数据集、不同的优化器、不同的层数、不同的损失函数,但没有任何效果。
出了什么问题?我做错了什么?
【问题讨论】:
-
你的数据集中有多少类?请注意,您不能同时使用
class_mode="categorical"和loss='sparse_categorical_crossentropy'。 -
@Lescurel 16 节课
-
我不能确定,但是当您说
I have tried it with different datasets, different optimizers, different numbers of layers, different loss functions, nothing worked时,您是否始终收到相同的错误消息?另外,当您提出与 python 相关的问题时,请添加完整的 python Traceback,这有助于了解您的代码在哪里失败。 -
我没有得到同样的错误,但也没有回溯
标签: python tensorflow keras computer-vision tensorflow2.0