我尝试遵循Image Classification Tutorial,但不幸的是,创建模型后,它并没有告诉您如何使用模型。
我当前用于创建模型的代码是:
model = Sequential([
tf.keras.layers.Conv2D(16, 3, padding='same', activation='relu', input_shape=(IMG_SIZE, IMG_SIZE ,3)),
tf.keras.layers.MaxPooling2D(),
tf.keras.layers.Dropout(0.1),
tf.keras.layers.Conv2D(32, 3, padding='same', activation='relu'),
tf.keras.layers.MaxPooling2D(),
tf.keras.layers.Conv2D(64, 3, padding='same', activation='relu'),
tf.keras.layers.MaxPooling2D(),
tf.keras.layers.Dropout(0.1),
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(512, activation='relu'),
tf.keras.layers.Dense(1, activation='sigmoid')
])
model.compile(optimizer='adam',
loss=tf.keras.losses.BinaryCrossentropy(from_logits=True),
metrics=['accuracy'])
在我的第一次尝试中,我没有在最后一个Dense层上使用activation='sigmoid'
,但是从模型中得到的预测例如是[[332.9539]]
,但我不知道该如何解释。
在阅读this答案后,我添加了Sigmoid激活以接收介于0和1之间的值,但是不幸的是,在训练模型时,其精度一直保持在0.5以上。
我在做什么错了?
答案 0 :(得分:0)
如果将S型激活添加到最后一层,则由于模型不再产生logit,因此需要从损失实例中删除from_logits=True
:
model.compile(optimizer='adam',
loss=tf.keras.losses.BinaryCrossentropy(),
metrics=['accuracy'])