Генератор
def generator(n_epochs):
train_dataset_generator = tf.data.Dataset.from_generator(train_generator, (tf.float32, tf.float32))
train_dataset_generator = train_dataset_generator.repeat(n_epochs)
train_iterator = train_dataset_generator.make_one_shot_iterator()
while True:
train_images, train_label = train_iterator.get_next()
yield train_images, train_label
Модель
model = tf.keras.Sequential([tf.keras.layers.Conv2D(kernel_size=(3, 3), filters=64, dtype='float32', input_shape=(120, 120, 3)),
tf.keras.layers.Activation('relu'),
tf.keras.layers.Conv2D(kernel_size=(3, 3), filters=64, use_bias=True, kernel_regularizer=l2(0.01), bias_regularizer=l2(0.05)),
tf.keras.layers.BatchNormalization(),
tf.keras.layers.Activation('relu'),
tf.keras.layers.MaxPooling2D(pool_size=2),
tf.keras.layers.Conv2D(kernel_size=(3, 3), filters=32, use_bias=True, kernel_regularizer=l2(0.01), bias_regularizer=l2(0.05)),
#tf.keras.layers.BatchNormalization(),
tf.keras.layers.Activation('relu'),
tf.keras.layers.MaxPooling2D(pool_size=2),
tf.keras.layers.Conv2D(kernel_size=(3, 3), filters=32, use_bias=True, kernel_regularizer=l2(0.01), bias_regularizer=l2(0.05)),
#tf.keras.layers.BatchNormalization(),
tf.keras.layers.Activation('relu'),
tf.keras.layers.MaxPooling2D(pool_size=2),
tf.keras.layers.Conv2D(kernel_size=(3, 3), filters=16, use_bias=True, kernel_regularizer=l2(0.01), bias_regularizer=l2(0.05)),
tf.keras.layers.BatchNormalization(),
tf.keras.layers.Activation('relu'),
tf.keras.layers.MaxPooling2D(pool_size=2),
tf.keras.layers.Conv2D(kernel_size=(3, 3), filters=8, use_bias=True, kernel_regularizer=l2(0.01), bias_regularizer=l2(0.05)),
tf.keras.layers.BatchNormalization(),
tf.keras.layers.Activation('relu'),
tf.keras.layers.MaxPooling2D(pool_size=2),
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(64, use_bias = True, kernel_regularizer=l2(0.01), bias_regularizer=l2(0.05)),
tf.keras.layers.Activation('relu'),
#tf.keras.layers.GlobalAveragePooling2D(),
tf.keras.layers.Dense(12, activation='linear', name='fc')
])
model.compile(optimizer=tf.train.AdamOptimizer(1e-4), loss='mse', metrics=['mae', 'mse']) # mean absolute error
model.summary()
Обучение
batch_size = 32
n_epochs = 10
#num_batches = int(total_items/batch_size)
num_batches = 2000
train_generator_example = generator(n_epochs)
#train_data_generator = my_input_fn(total_items, epochs)
model.fit_generator(train_generator_example, steps_per_epoch=num_batches, epochs=n_epochs, verbose=1)
всякий раз, когда я пытаюсь использовать mode.fit_generator (.... Я всегда получаю сообщение об ошибке: RuntimeError: Вы должны скомпилировать свою модель перед ее использованием. Если я использую model.fit (.....), все работает нормально. Я не понимаю, с какой проблемой я здесь сталкиваюсь.