Получение «Ошибки значения: «выходы» должны быть определены до цикла». Ошибка при подгонке модели

#python #tensorflow #keras #conv-neural-network

Вопрос:

Я сделал модель CNN для обучения черно-белым изображениям для обучения на ТПУ размером 100*100. Добавлен базовый обратный вызов, но после его запуска он выдавал выходные данные, которые должны быть определены с ошибкой.

 def create_model():
    model = Sequential()
    model.add(InputLayer(input_shape=(100, 100, 1)))

# Building the neural network
    model = Sequential()
    model.add(InputLayer(input_shape=(100, 100, 1)))
    model.add(Conv2D(8, (3, 3), activation='relu', padding='same', strides=2))
    model.add(Conv2D(8, (3, 3), activation='relu', padding='same'))
    model.add(Conv2D(16, (3, 3), activation='relu', padding='same'))
    model.add(Conv2D(16, (3, 3), activation='relu', padding='same', strides=2))
    model.add(Conv2D(32, (3, 3), activation='relu', padding='same'))
    model.add(Conv2D(32, (3, 3), activation='relu', padding='same', strides=2))
    model.add(UpSampling2D((2, 2)))
    model.add(Conv2D(32, (3, 3), activation='relu', padding='same'))
    model.add(UpSampling2D((2, 2)))
    model.add(Conv2D(16, (3, 3), activation='relu', padding='same'))
    model.add(UpSampling2D((2, 2)))
    model.add(Conv2D(2, (3, 3), activation='tanh', padding='same'))
    model.compile(
    optimizer='adam',
    loss = 'binary_crossentropy',
    metrics=['accuracy'], experimental_steps_per_execution = 20)
    return model
    
with tpu_strategy.scope(): # creating the model in the TPUStrategy scope means we will train the model on the TPU
  model = create_model()
model.summary()

history = model.fit(X_train,y_train,validation_data = (X_test,y_test),steps_per_epoch=20, epochs=100, callbacks=[lr_callback])

final_accuracy = history.history["val_accuracy"][-5:]
print("FINAL ACCURACY MEAN-5: ", np.mean(final_accuracy))
 

но я получаю эту ошибку

 ValueError: in user code:

    /opt/conda/lib/python3.7/site-packages/tensorflow/python/keras/engine/training.py:811 train_function  *
        for _ in math_ops.range(self._steps_per_execution):
    /opt/conda/lib/python3.7/site-packages/tensorflow/python/autograph/operators/control_flow.py:414 for_stmt
        symbol_names, opts)
    /opt/conda/lib/python3.7/site-packages/tensorflow/python/autograph/operators/control_flow.py:629 _tf_range_for_stmt
        opts)
    /opt/conda/lib/python3.7/site-packages/tensorflow/python/autograph/operators/control_flow.py:1059 _tf_while_stmt
        body, get_state, set_state, init_vars, nulls, symbol_names)
    /opt/conda/lib/python3.7/site-packages/tensorflow/python/autograph/operators/control_flow.py:1032 _try_handling_undefineds
        _verify_loop_init_vars(init_vars, symbol_names, first_iter_vars)
    /opt/conda/lib/python3.7/site-packages/tensorflow/python/autograph/operators/control_flow.py:193 _verify_loop_init_vars
        raise ValueError(error_msg)

    ValueError: 'outputs' must be defined before the loop.
 

Комментарии:

1. Я не совсем понимаю ошибку, но я вижу ошибку в цикле for, зацикливающемся на количестве шагов за выполнение. Удалите steps_per_execution=20 и попробуйте.

2. Это сработало !!! Большое спасибо!

3. Здорово, что это сработало!

4. Можете ли вы поддержать мой комментарий?