训练准确性有所提高,但验证仍保持不变?

时间:2019-05-20 20:07:42

标签: tensorflow keras

我正在使用TF 2.0。我试图根据自己的数据训练网络。进行得不好。验证精度接近0且停滞不前。我尝试了许多正则化操作都没有效果。然后,我尝试在3类数据上训练网络,其中每个类中的所有图像都相同,以消除发生变化的可能性。但这也不起作用。由于所有课堂上的图像都是相同的,我希望验证准确度与训练准确度完全匹配,因为没有新数据。为什么不是这样?这是我的代码:

import tensorflow as tf
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras.models import Model
from tensorflow.keras.layers import Dense, GlobalAveragePooling2D
from tensorflow.keras.applications.mobilenet import preprocess_input
import matplotlib.pyplot as plt

base_model = tf.keras.applications.MobileNet(weights='imagenet', include_top=False)


def turn_off(n):
    for layer in model.layers[:n]:
        layer.trainable = False
    for layer in model.layers[n:]:
        layer.trainable = True


x = base_model.output
x = GlobalAveragePooling2D()(x)
x = Dense(1024, activation='relu')(
    x)  # we add dense layers so that the model can learn more complex functions and classify for better results.
x = Dense(1024, activation='relu')(x)  # dense layer 2
x = Dense(512, activation='relu')(x)  # dense layer 3
preds = Dense(3, activation='softmax')(x)  # final layer with softmax activation

model = Model(inputs=base_model.input, outputs=preds)

turn_off(87)

train_datagen = ImageDataGenerator(preprocessing_function=preprocess_input,
                                   rescale=1. / 255,
                                   validation_split=0.2)  # set validation split

train_generator = train_datagen.flow_from_directory(
    '/users/josh.flori/desktop/colors/',
    target_size=(224, 224),
    batch_size=32,
    color_mode='rgb',
    class_mode='categorical',
    subset='training',
    shuffle=True)  # set as training data

validation_generator = train_datagen.flow_from_directory(
    '/users/josh.flori/desktop/colors/',
    target_size=(224, 224),
    batch_size=32,
    color_mode='rgb',
    class_mode='categorical',
    subset='validation',
    shuffle=True)  # set as validation data

# Adam optimizer
# loss function will be categorical cross entropy
# evaluation metric will be accuracy
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])

history = model.fit_generator(
    train_generator,
    steps_per_epoch=train_generator.samples // train_generator.batch_size,
    validation_data=validation_generator,
    validation_steps=validation_generator.samples // train_generator.batch_size,
    epochs=6)

这是训练输出

9/9 [==============================] - 19s 2s/step - loss: 0.2645 - accuracy: 0.9134 - val_loss: 1.6668 - val_accuracy: 0.3438
Epoch 2/6
9/9 [==============================] - 20s 2s/step - loss: 0.0417 - accuracy: 0.9567 - val_loss: 2.6176 - val_accuracy: 0.3438
Epoch 3/6
9/9 [==============================] - 17s 2s/step - loss: 0.4771 - accuracy: 0.9422 - val_loss: 4.0694 - val_accuracy: 0.3438
Epoch 4/6
9/9 [==============================] - 18s 2s/step - loss: 0.0000e+00 - accuracy: 1.0000 - val_loss: 2.1304 - val_accuracy: 0.3125
Epoch 5/6
9/9 [==============================] - 18s 2s/step - loss: 9.7658e-07 - accuracy: 1.0000 - val_loss: 3.1633 - val_accuracy: 0.3125
Epoch 6/6
9/9 [==============================] - 18s 2s/step - loss: 2.2571e-05 - accuracy: 1.0000 - val_loss: 3.4949 - val_accuracy: 0.3125

我的图像文件夹如下

image

每个文件夹中完全有128张相同的图像。

我整天都在阅读,尝试使用不同的图像,但我似乎什么也没找到。是什么导致这种特殊行为?它一定很明显,但我不确定。

0 个答案:

没有答案
相关问题