Блокнот Jupyter и Keras-TQDM: AttributeError: у объекта 'TQDMNotebookCallback' нет атрибута 'on_train_batch_begin' - PullRequest
0 голосов
/ 02 мая 2019

Я пытаюсь использовать keras tqdm индикаторы выполнения в Jupyter Notebook, но я продолжаю получать сообщение об ошибке из названия.

Мой код:

X_train, X_val, Y_train, Y_val = train_test_split(X_train, Y_train, test_size=0.1,random_state=2)
model = keras.Sequential([keras.layers.Flatten(input_shape=(28,28,1)),
                          keras.layers.Dense(128, activation=tf.nn.relu),
                          keras.layers.Dense(10, activation=tf.nn.softmax
                         )])
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
history = model.fit(X_train, Y_train, epochs=5, verbose=0, callbacks=[TQDMNotebookCallback()])

Я получаю следующую ошибку после запуска последней строки:

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-27-edd4c9b07979> in <module>
----> 1 history = model.fit(X_train, Y_train, epochs=5, verbose=0, callbacks=[TQDMNotebookCallback()])

/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/tensorflow/python/keras/engine/training.py in fit(self, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, max_queue_size, workers, use_multiprocessing, **kwargs)
    878           initial_epoch=initial_epoch,
    879           steps_per_epoch=steps_per_epoch,
--> 880           validation_steps=validation_steps)
    881 
    882   def evaluate(self,

/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/tensorflow/python/keras/engine/training_arrays.py in model_iteration(model, inputs, targets, sample_weights, batch_size, epochs, verbose, callbacks, val_inputs, val_targets, val_sample_weights, shuffle, initial_epoch, steps_per_epoch, validation_steps, mode, validation_in_fit, **kwargs)
    323         # Callbacks batch_begin.
    324         batch_logs = {'batch': batch_index, 'size': len(batch_ids)}
--> 325         callbacks._call_batch_hook(mode, 'begin', batch_index, batch_logs)
    326         progbar.on_batch_begin(batch_index, batch_logs)
    327 

/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/tensorflow/python/keras/callbacks.py in _call_batch_hook(self, mode, hook, batch, logs)
    194     t_before_callbacks = time.time()
    195     for callback in self.callbacks:
--> 196       batch_hook = getattr(callback, hook_name)
    197       batch_hook(batch, logs)
    198     self._delta_ts[hook_name].append(time.time() - t_before_callbacks)

AttributeError: 'TQDMNotebookCallback' object has no attribute 'on_train_batch_begin'

Ответы [ 2 ]

1 голос
/ 05 мая 2019

Краткое описание: Использовать библиотеку keras напрямую, вместо tenorflow.keras

Изначально я использовал keras из tenorflow (и всю библиотеку keras из tenorflow) и столкнулся с той же проблемой, т.е.

from tensorflow.keras.models import Sequential
from tensorflow.keras.optimizers import Adam
.
.

Но, когда я переключился на библиотеки keras, ошибка «TQDMNotebookCallback» разрешилась.Пример:

from keras.models import Sequential
from keras.optimizers import Adam
.
.

Я не знаю точную причину, но может быть, это связано с источником керас.

0 голосов
/ 02 мая 2019

Кажется, это проблема с keras tqdm .От Github .

Обход, опубликованный в выпуске, работал для меня:

from keras_tqdm import TQDMNotebookCallback

# keras, model definition...
cb = TQDMNotebookCallback()
setattr(cb,'on_train_batch_begin',lambda x,y:None)
setattr(cb,'on_train_batch_end',lambda x,y:None)

model.fit(X_train, Y_train, verbose=0, callbacks=[cb])
...