【问题标题】:Keras and TensorBoard - AttributeError: 'Sequential' object has no attribute '_get_distribution_strategy'Keras 和 TensorBoard - AttributeError: 'Sequential' 对象没有属性 '_get_distribution_strategy'
【发布时间】:2020-05-10 16:18:00
【问题描述】:

我正在使用 keras 并尝试使用 tensorboard 绘制日志。您可以在下面找到我遇到的错误以及我正在使用的软件包版本列表。我无法理解它给了我“顺序”对象没有属性“_get_distribution_strategy”的错误。

包装: 凯拉斯 2.3.1 Keras-应用程序 1.0.8 Keras-预处理 1.1.0 张量板 2.1.0 张量流 2.1.0 张量流估计器 2.1.0

型号:

model = Sequential()
    model.add(Embedding(MAX_NB_WORDS, EMBEDDING_DIM, input_shape=(X.shape[1],)))
    model.add(GlobalAveragePooling1D())
    #model.add(Dense(10, activation='sigmoid'))
    model.add(Dense(len(CATEGORIES), activation='softmax'))
    model.summary()
    #opt = 'adam'       # Here we can choose a certain optimizer for our model
    opt = 'rmsprop'
    model.compile(loss='categorical_crossentropy', optimizer=opt, metrics=['accuracy'])                  # Here we choose the loss function, input our optimizer choice, and set our metrics.

    # Create a TensorBoard instance with the path to the logs directory
    tensorboard = TensorBoard(log_dir='logs/{}'.format(time()),
                    histogram_freq = 1,
                    embeddings_freq = 1,
                    embeddings_data = X)

    history = model.fit(X, Y, epochs=epochs, batch_size=batch_size, validation_split=0.1, callbacks=[tensorboard])

错误:

C:\Users\Bruno\AppData\Local\Programs\Python\Python37\lib\site-packages\keras\callbacks\tensorboard_v2.py:102: UserWarning: The TensorBoard callback does not support embeddings display when using TensorFlow 2.0. Embeddings-related arguments are ignored.
  warnings.warn('The TensorBoard callback does not support '
C:\Users\Bruno\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow_core\python\framework\indexed_slices.py:433: UserWarning: Converting sparse IndexedSlices to a dense Tensor of unknown shape. This may consume a large amount of memory.
  "Converting sparse IndexedSlices to a dense Tensor of unknown shape. "
Train on 1123 samples, validate on 125 samples
Traceback (most recent call last):
  File ".\NN_Training.py", line 128, in <module>
    history = model.fit(X, Y, epochs=epochs, batch_size=batch_size, validation_split=0.1, callbacks=[tensorboard])    # Feed in the train
set for X and y and run the model!!!
  File "C:\Users\Bruno\AppData\Local\Programs\Python\Python37\lib\site-packages\keras\engine\training.py", line 1239, in fit
    validation_freq=validation_freq)
  File "C:\Users\Bruno\AppData\Local\Programs\Python\Python37\lib\site-packages\keras\engine\training_arrays.py", line 119, in fit_loop
    callbacks.set_model(callback_model)
  File "C:\Users\Bruno\AppData\Local\Programs\Python\Python37\lib\site-packages\keras\callbacks\callbacks.py", line 68, in set_model
    callback.set_model(model)
  File "C:\Users\Bruno\AppData\Local\Programs\Python\Python37\lib\site-packages\keras\callbacks\tensorboard_v2.py", line 116, in set_model
    super(TensorBoard, self).set_model(model)
  File "C:\Users\Bruno\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow_core\python\keras\callbacks.py", line 1532, in
set_model
    self.log_dir, self.model._get_distribution_strategy())  # pylint: disable=protected-access
AttributeError: 'Sequential' object has no attribute '_get_distribution_strategy'```

【问题讨论】:

    标签: python python-3.x tensorflow keras tensorboard


    【解决方案1】:

    您在 kerastf.keras 之间混合导入,它们不是同一个库,不支持这样做。

    您应该从kerastf.keras 之一的库中进行所有导入。

    【讨论】:

    • 我正在使用以下导入:从 keras.preprocessing.text 导入 Tokenizer,从 keras.preprocessing.sequence 导入 pad_sequences,从 keras.models 导入 Sequential,从 keras.layers 导入 Dense、Embedding、GlobalAveragePooling1D ,从 keras.models 导入模型,load_model,从 keras.callbacks 导入 TensorBoard。所有这些都来自 keras,我猜没有混合任何库。
    • @BrunoTaborda 您的回溯说不然,因为最后是从 keras 到 tf.keras 内部,也许您可​​以添加一个我们可以运行并重现问题的脚本。
    • 不幸的是我不能......有什么办法可以强迫他使用 keras 而不是 tf.keras?
    • @BrunoTaborda 抱歉,如果没有实际代码,就无法说出来。
    • 作为最终解决方案,我将我的导入从 keras 更改为 tf.keras,它起作用了。
    【解决方案2】:

    您的 python 环境似乎混合了来自 kerastensorflow.keras 的导入。尝试像这样使用 Sequential 模块:

    model = tensorflow.keras.Sequential()
    

    或将您的导入更改为类似

    import tensorflow
    layers = tensorflow.keras.layers
    BatchNormalization = tensorflow.keras.layers.BatchNormalization
    Conv2D = tensorflow.keras.layers.Conv2D
    Flatten = tensorflow.keras.layers.Flatten
    TensorBoard = tensorflow.keras.callbacks.TensorBoard
    ModelCheckpoint = tensorflow.keras.callbacks.ModelCheckpoint
    

    ...等

    【讨论】:

    • 我评论了:from tensorflow.keras.models import Sequential 并将其替换为:import tensorflow 然后创建我的模型,就像你说的那样:model = tensorflow.keras.Sequential() 工作就像一个魅力!
    猜你喜欢
    • 1970-01-01
    • 2022-12-28
    • 1970-01-01
    • 2020-03-20
    • 2019-11-29
    • 1970-01-01
    • 2020-04-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多