【发布时间】:2021-07-29 11:46:23
【问题描述】:
我正在尝试训练 CNN 将图像分类为 3 个类别。每个图像可以属于多个类。所以在网络输出中,我期望每个类都有一个概率。
当我进行数据加载时,我有一个带有列的 pandas 数据框:[imageID, class 1, class 2, class 3]。图片尺寸为 (256,256,3),标签为 (3,1)(例如:如果图片属于 1 类,2 类标签为 [1,1,0])
然后,这是我的模型:
print("Define model")
base_model = tf.keras.applications.VGG16(include_top=False, input_shape=(256,256,3),weights='imagenet')
base_model.trainable = True
fine_tune_at = 15
for layer in base_model.layers[:fine_tune_at]:
layer.trainable = False
global_average_layer = tf.keras.layers.GlobalAveragePooling2D()
prediction_layer = tf.keras.layers.Dense(3, activation='sigmoid')
inputs = tf.keras.Input(shape=(256,256,3))
x = base_model(inputs, training=False)
x = global_average_layer(x)
x = tf.keras.layers.Dropout(0.2)(x)
outputs = prediction_layer(x)
model = tf.keras.Model(inputs, outputs)
base_learning_rate = 0.00001
model.compile(optimizer=tf.keras.optimizers.Adam(lr=base_learning_rate),
loss=tf.keras.losses.BinaryCrossentropy(from_logits=False), #True
metrics=['accuracy'])
print("Training")
history = model.fit(train_generator, epochs = 75, validation_data= val_generator)
【问题讨论】:
-
不应该 training=False 改为 True 吗?
标签: python keras deep-learning tensorflow2.0 multilabel-classification