#python #tensorflow #keras
Вопрос:
Я новичок в машинном обучении, и я хочу знать, почему появляется эта ошибка. Цель этой программы-ввести изображения rgb, затем преобразовать их в оттенки серого, и CNN изучит изображения в оттенках серого.
from tensorflow.keras.preprocessing.image import ImageDataGenerator
def to_grayscale_then_rgb(image): # this function is to take rgb image input and convert to grayscale
image = tf.image.rgb_to_grayscale(image)
image = tf.image.grayscale_to_rgb(image)
return image
trainDataGen = ImageDataGenerator(
rescale = 1./255,
rotation_range = 30,
shear_range = 0.2,
horizontal_flip = True,
zoom_range = 0.3,
fill_mode = 'nearest',preprocessing_function=to_grayscale_then_rgb,
validation_split = 0.4
)
valDataGen = ImageDataGenerator(
rescale = 1./255,
validation_split = 0.4
)
train_generator = trainDataGen.flow_from_directory(
base_dir,
target_size = (150, 150),
color_mode = 'grayscale',
batch_size = 4,
class_mode = 'categorical',
subset = 'training'
)
validation_generator = trainDataGen.flow_from_directory(
base_dir,
target_size = (150, 150),
color_mode = 'grayscale',
batch_size = 4,
class_mode = 'categorical',
subset = 'validation'
)
Си-эн-эн выглядит так. Размер используемых изображений составляет 150 пикселей x 150 пикселей.
from keras import models
model = tf.keras.models.Sequential([
tf.keras.layers.Conv2D(32, (3, 3), activation = 'relu', input_shape = (150, 150, 3)),
tf.keras.layers.Conv2D(32, (3,3), activation = 'relu'),
tf.keras.layers.MaxPooling2D(2, 2),
tf.keras.layers.Conv2D(64, (3, 3), activation = 'relu'),
tf.keras.layers.Conv2D(64, (3, 3), activation = 'relu'),
tf.keras.layers.MaxPooling2D(2, 2),
tf.keras.layers.Conv2D(128, (3, 3), activation = 'relu'),
tf.keras.layers.Conv2D(128, (3, 3), activation = 'relu'),
tf.keras.layers.MaxPooling2D(2, 2),
tf.keras.layers.Conv2D(256, (3, 3), activation = 'relu'),
tf.keras.layers.MaxPooling2D(2, 2),
tf.keras.layers.Flatten(),
tf.keras.layers.Dropout(0.5),
tf.keras.layers.Dense(512, activation = 'relu'),
tf.keras.layers.Dense(3, activation = 'softmax')
])
model.compile(loss='categorical_crossentropy',
optimizer=tf.optimizers.Adam(),
metrics=['accuracy'])
history = model.fit(
train_generator,
steps_per_epoch = 35,
epochs = 25,
validation_data = validation_generator,
validation_steps = 5,
callbacks = [callb()],
verbose = 2
)
и когда я его запускаю. Это показывает что-то вроде этого
изображения ошибки