【发布时间】:2020-05-02 09:05:54
【问题描述】:
我正在尝试制作一个可以识别图片中是否有猫的神经网络。我在 tensorflow 网站上找到了this tutorial,并试图使其适应我的问题。本教程是对猫和狗进行分类,但由于我只想检测猫,所以我将类别更改为猫和非猫。
对于非猫,我下载了一个随机图像数据集。
我在教程中的代码中添加了两个生成器:
test_data_gen = test_image_generator.flow_from_directory(batch_size=batch_size,
directory=test_dir,
target_size=(IMG_HEIGHT, IMG_WIDTH),
class_mode='binary')
pred_data_gen = pred_image_generator.flow_from_directory(batch_size=batch_size,
directory=pred_dir,
target_size=(IMG_HEIGHT, IMG_WIDTH),
class_mode='binary')
然后像这样测试模型:
print('\n# Evaluate on test data')
results = model.evaluate_generator(test_data_gen)
print('test loss, test acc:', results)
print('\n# Generate predictions')
predictions = model.predict(pred_data_gen)
print(len(predictions))
print(predictions)
这是输出:
# Evaluate on test data
test loss, test acc: [0.45212748232815003, 0.9324082]
# Generate predictions for custom samples
256
[[ -8.023465 ]
[ -7.781438 ]
[ 50.281197 ]
[-10.172492 ]
[ -5.1096087 ]
[ 43.0299 ]
[ 21.416649 ]
...
[-10.866359 ]
[-14.797473 ]
[ 84.72212 ]
[ 23.712345 ]
[ -6.4916744 ]
[-18.384903 ]
[ 33.10642 ]]
测试准确率很高,但我不知道这些结果意味着什么。我认为它们应该在 0 和 1 之间,但它们甚至有负值。我应该如何解释这些结果?
编辑:
这是我的模型(在最后一层添加 sigmoid 激活函数之前):
model = Sequential([
Conv2D(16, 3, padding='same', activation='relu', input_shape=(IMG_HEIGHT, IMG_WIDTH, 3)),
MaxPooling2D(),
Conv2D(32, 3, padding='same', activation='relu'),
MaxPooling2D(),
Conv2D(64, 3, padding='same', activation='relu'),
MaxPooling2D(),
Flatten(),
Dense(512, activation='relu'),
Dense(1)
])
我把最后一层改成Dense(1, activation='sigmoid'),输出如下:
# Evaluate on test data
test loss, test acc: [0.714477022488912, 0.5949367]
# Generate predictions for custom samples
256
[[1.]
[1.]
[1.]
...
[1.]
[1.]
[1.]]
所有预测值都是 1,即使测试集中只有一半的图像是猫。
EDIT2:
这是我编译和拟合模型的方法:
model.compile(optimizer='adam',
loss=tf.keras.losses.BinaryCrossentropy(from_logits=True),
metrics=['accuracy'])
model.summary()
history = model.fit_generator(
train_data_gen,
steps_per_epoch=total_train // batch_size,
epochs=epochs,
validation_data=val_data_gen,
validation_steps=total_val // batch_size
)
【问题讨论】:
-
尝试在最后一层应用 Dense(1, activation='sigmoid')
-
请分享您的型号代码
-
@CodePope 已编辑帖子。
-
你能粘贴完整的代码,尤其是你编译和适合的位吗?
-
@LukaszTracewski 添加了更多代码。
标签: python python-3.x tensorflow machine-learning keras