Ошибка атрибута Tensorboard: объект 'ModelCheckpoint' не имеет атрибута 'on_train_batch_begin'

В настоящее время я использую Tensorboard, используя приведенный ниже обратный вызов, как указано в этом сообщении SO, как показано ниже.

from keras.callbacks import ModelCheckpoint

CHECKPOINT_FILE_PATH = '/{}_checkpoint.h5'.format(MODEL_NAME)
checkpoint = ModelCheckpoint(CHECKPOINT_FILE_PATH, monitor='val_acc', verbose=1, save_best_only=True, mode='max', period=1)

Когда я запускаю модель плотной сети Keras, я получаю следующую ошибку. У меня не было проблем с запуском Tensorboard таким образом с другими моими моделями, что делает эту ошибку очень странной. Согласно этому сообщению Github, официальным решением является использование официальной реализации Tensorboard; однако для этого требуется обновление до Tensorflow 2.0, что для меня не идеально. Кто-нибудь знает, почему я получаю следующую ошибку для этой конкретной сети densenet, и есть ли обходной путь / исправление, которое кто-то знает?

AttributeError Traceback (последний вызов последним) в () 26 batch_size = 32, 27 class_weight = class_weights_dict, ---> 28 callbacks = callbacks_list 29) 30

2 кадра /usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/callbacks.py в _call_batch_hook (self, mode, hook, batch, logs) 245 t_before_callbacks = time.time () 246 для обратного вызова в self.callbacks: -> 247 batch_hook = getattr (callback, hook_name) 248 batch_hook (batch, logs) 249 self._delta_ts [hook_name] .append (time.time () - t_before_callbacks)

AttributeError: объект 'ModelCheckpoint' не имеет атрибута 'on_train_batch_begin'

Я бегаю по плотной сети

from tensorflow.keras import layers, Sequential
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras.applications.densenet import preprocess_input, DenseNet121
from keras.optimizers import SGD, Adagrad
from keras.utils.np_utils import to_categorical

IMG_SIZE = 256
NUM_CLASSES = 5
NUM_EPOCHS = 100

x_train = np.asarray(x_train)
x_test = np.asarray(x_test)

y_train = to_categorical(y_train, NUM_CLASSES)
y_test = to_categorical(y_test, NUM_CLASSES)


x_train = x_train.reshape(x_train.shape[0], IMG_SIZE, IMG_SIZE, 3)
x_test = x_test.reshape(x_test.shape[0], IMG_SIZE, IMG_SIZE, 3)

densenet = DenseNet121(
    include_top=False,
    input_shape=(IMG_SIZE, IMG_SIZE, 3)
)

model = Sequential()
model.add(densenet)
model.add(layers.GlobalAveragePooling2D())
model.add(layers.Dense(NUM_CLASSES, activation='softmax'))
model.summary()

model.compile(loss='categorical_crossentropy',
              optimizer='adam',
              metrics=['accuracy'])

history = model.fit(x_train,
                    y_train,
                    epochs=NUM_EPOCHS,
                    validation_data=(x_test, y_test),
                    batch_size=32,
                    class_weight=class_weights_dict,
                    callbacks=callbacks_list
                   )

person p4t    schedule 20.07.2019    source источник


Ответы (4)


В своем импорте вы смешиваете keras и tf.keras, которые НЕ совместимы друг с другом, так как вы получаете подобные странные ошибки.

Поэтому простое решение - выбрать keras или tf.keras и выполнить весь импорт из этого пакета и никогда не смешивать его с другим.

person Dr. Snoopy    schedule 20.07.2019

Я заменяю эту строчку

from keras.callbacks import EarlyStopping, ModelCheckpoint

К этой строке

from tensorflow.keras.callbacks import EarlyStopping, ModelCheckpoint
person Abdul Kader Jelane    schedule 19.06.2020
comment
По сути, это то же руководство, что и три существующих ответа год назад. - person Jeremy Caney; 19.06.2020

Сделайте весь импорт из keras или tensorflow.keras

Надеюсь, это решит проблему!

person R007    schedule 14.11.2019
comment
Это именно то, что принятый ответ говорит НЕ делать - person xiawi; 14.11.2019

Да, импорт смешивается из keras и tensorflow

попробуйте придерживаться tenorflow.keras, например:

from tensorflow.keras.callbacks import EarlyStopping
person Thirumalai Parthasarathy    schedule 16.05.2020