python - Keras模型的输出维度
问题描述
我使用 ImageDataGenerator 加载我的训练数据
train_generator = train_datagen.flow_from_directory(
directory= TRAIN_PATH,
target_size=(224, 224),
color_mode="rgb",
batch_size=32,
class_mode="categorical",
shuffle=True,
seed=42
)
之后我收到一条消息
Found 6552 images belonging to 102 classes.
当我以这种方式定义模型时
model1 = MobileNetV2(include_top=False, input_shape=(224, 224, 3))
flat1 = Flatten()(model1.outputs)
class1 = Dense(1024, activation='relu')(flat1)
output = Dense(output_dim = 102, activation='softmax')(class1)
model = Model(inputs=model1.inputs, outputs=output)
model.compile(optimizer=keras.optimizers.Adam(),
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
history = model.fit_generator(
train_generator,
steps_per_epoch=100,
epochs=100,
verbose=2)
我有以下错误
ValueError: Error when checking target: expected dense_2 to have shape (1,) but got array with shape (102,)
但是我的输出层的形状是 102。为什么会这样?
解决方案
您可以简单地将损失从 更改为 来sparse_categorical_crossentropy
解决categorical_crossentropy
。
生成器中的“分类”模式将一次性编码标签,这不适合sparse_categorical_crossentropy
推荐阅读
- python - pm.Simulator 不接受单参数向量函数
- python - Pandas 从值中减去值 - 使用 DateTime 7 天 - .shift 不是答案
- android - 播放应用签名以进一步上传 Alpha 大头钉
- mysql - Mysql:使用单个ID更新具有相同名称的所有行
- reactjs - 如何在库“@react-google-maps/api”中使用“基于云的地图样式”
- apache - 如何将站点 URL 重定向到 https://example.com
- java - 模拟另一个对象调用的方法调用,该对象自动装配并在另一个类中接口
- javascript - Axios 从 API 请求返回 [object Object]
- python-3.x - 使用pandas如何通过矢量化连接数据帧中的值在另一个数据帧的范围之间
- excel - 我怎样才能使这个 vba 按我需要的方式工作?