Tensorflow CNN只有1个输出预测值



我已经研究过类似的主题,但没有任何技巧对我有帮助。我的模型只预测和输出一个类,即使在控制台中我也只看到一个数组值。我得检查一下帐号上的字体是假的还是真的。它打印的精度为0.99,甚至为1.00,但在手动检查模型预测后,它只输出0。我用每节课1000张图片训练它。有什么解决方案吗?我的代码:

train = tf.keras.preprocessing.image.ImageDataGenerator(rescale=1/255)
validation = train_set = tf.keras.preprocessing.image.ImageDataGenerator(rescale=1/255)
validation_set = validation.flow_from_directory('Samples', class_mode='binary', batch_size=30, target_size=(500, 50), shuffle=True, seed=42, color_mode='rgb')
train_set = train.flow_from_directory(directory='Train', class_mode='binary', batch_size=30, target_size=(500, 50), shuffle=True, seed=42, color_mode='rgb')
print(train_set.classes)
model = tf.keras.models.Sequential([
tf.keras.layers.Conv2D(16, kernel_size = (3, 3), activation='relu', input_shape=(500, 50, 3)),
tf.keras.layers.MaxPool2D(pool_size = (2, 2)),
tf.keras.layers.Conv2D(32, kernel_size = (3, 3), activation='relu'),
tf.keras.layers.MaxPool2D(pool_size = (2, 2)),
tf.keras.layers.Conv2D(64, kernel_size = (3, 3), activation='relu'),
tf.keras.layers.MaxPool2D(pool_size = (2, 2)),
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(512, activation='relu'),
tf.keras.layers.Dense(1, activation='sigmoid')
])
print(train_set.class_indices)
model.compile(loss='binary_crossentropy', optimizer='adam', metrics= ['accuracy'])
model.fit(train_set, epochs=2, validation_data=validation_set)
path = 'Samples/'
DIRECTORIES = ['Fake', 'Real']
for dir in DIRECTORIES:
for file in os.listdir(path+dir):
img = tf.keras.preprocessing.image.load_img(path+dir+'/'+file)
img = tf.keras.preprocessing.image.img_to_array(img)
img = np.expand_dims(img, axis=0)
images = np.vstack([img])
val = np.argmax(model.predict(images))
print(val)

要比较的照片:真实的伪造

输出

您使用的模型就像在输出层中有两个输出神经元一样。np.argmax(model.predict(images))将返回具有最大值的神经元的索引,但由于只有1,它将始终返回0。只需检查predict返回的值是否超过阈值,或者交替使用两个神经元。

最新更新