【发布时间】:2023-03-22 20:37:01
【问题描述】:
我正在尝试使用 TensorFlow、Keras 和 ImageDataGenerator 从头开始制作模型,但它并没有按预期进行。我只使用生成器来加载图像,所以没有使用数据增强。有两个文件夹包含训练数据和测试数据,每个文件夹有 36 个子文件夹,里面装满了图像。我得到以下输出:
Using TensorFlow backend.
Found 13268 images belonging to 36 classes.
Found 3345 images belonging to 36 classes.
Epoch 1/2
1/3 [=========>....................] - ETA: 0s - loss: 15.2706 - acc: 0.0000e+00
3/3 [==============================] - 1s 180ms/step - loss: 14.7610 - acc: 0.0667 - val_loss: 15.6144 - val_acc: 0.0312
Epoch 2/2
1/3 [=========>....................] - ETA: 0s - loss: 14.5063 - acc: 0.1000
3/3 [==============================] - 0s 32ms/step - loss: 15.5808 - acc: 0.0333 - val_loss: 15.6144 - val_acc: 0.0312
尽管看起来不错,但显然它根本没有训练。我尝试过使用不同数量的时期、步骤和更大的数据集——几乎没有任何变化。即使有超过 60k 的图像,训练每个 epoch 也需要大约半秒!奇怪的是,当我尝试将图像保存到各个文件夹时,它只保存了大约 500-600 个并且很可能会停止。
from tensorflow.python.keras.applications import ResNet50
from tensorflow.python.keras.models import Sequential
from tensorflow.python.keras.layers import Dense, Flatten, GlobalAveragePooling2D, Conv2D, Dropout
from tensorflow.python.keras.applications.resnet50 import preprocess_input
from tensorflow.python.keras.preprocessing.image import ImageDataGenerator
import keras
import os
if __name__ == '__main__':
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
image_size = 28
img_rows = 28
img_cols = 28
num_classes = 36
data_generator = ImageDataGenerator()
train_generator = data_generator.flow_from_directory(
directory="/final train 1 of 5/",
save_to_dir="/image generator output/train/",
target_size=(image_size, image_size),
color_mode="grayscale",
batch_size=10,
class_mode='categorical')
validation_generator = data_generator.flow_from_directory(
directory="/final test 1 of 5/",
save_to_dir="/image generator output/test/",
target_size=(image_size, image_size),
color_mode="grayscale",
class_mode='categorical')
model = Sequential()
model.add(Conv2D(20, kernel_size=(3, 3),
activation='relu',
input_shape=(img_rows, img_cols, 1)))
model.add(Conv2D(20, kernel_size=(3, 3), activation='relu'))
model.add(Flatten())
model.add(Dense(100, activation='relu'))
model.add(Dense(num_classes, activation='softmax'))
model.compile(loss=keras.losses.categorical_crossentropy,
optimizer='adam', # adam/sgd
metrics=['accuracy'])
model.fit_generator(train_generator,
steps_per_epoch=3,
epochs=2,
validation_data=validation_generator,
validation_steps=1)
似乎某些事情默默地失败并削弱了训练过程。
【问题讨论】:
标签: python tensorflow machine-learning keras classification