【问题标题】:'Sequential' object has no attribute '_get_distribution_strategy'“顺序”对象没有属性“_get_distribution_strategy”
【发布时间】:2020-03-02 14:10:04
【问题描述】:

从昨天开始我就遇到了问题,我不明白为什么。我在这里阅读了很多类似的主题,但我没有找到任何解决方案。

我的导入如下:

import numpy as np
import librosa.display
import utils
import librosa
import os
import keras

from keras.callbacks import TensorBoard
from keras.models import Sequential
from keras.layers import Dense, Dropout, Flatten, Conv2D, MaxPooling2D, BatchNormalization
from keras.utils import to_categorical
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report

我的模型是:

    model = keras.Sequential()

    model.add(Conv2D(32, kernel_size=(2, 2), activation='relu', input_shape=input_shape))
    model.add(BatchNormalization())

    model.add(Conv2D(48, kernel_size=(2, 2), activation='relu'))
    model.add(BatchNormalization())

    model.add(Conv2D(120, kernel_size=(2, 2), activation='relu'))
    model.add(BatchNormalization())

    model.add(MaxPooling2D(pool_size=(2, 2)))
    model.add(Dropout(0.25))

    model.add(Flatten())

    model.add(Dense(128, activation='relu'))
    model.add(BatchNormalization())
    model.add(Dropout(0.25))
    model.add(Dense(64, activation='relu'))
    model.add(BatchNormalization())
    model.add(Dropout(0.4))
    model.add(Dense(num_classes, activation='softmax'))
    model.compile(loss=keras.losses.categorical_crossentropy,
                  optimizer=keras.optimizers.Adadelta(),
                  metrics=['accuracy'])

    return model 

最后:

keras_callback = keras.callbacks.TensorBoard(log_dir='./Graph',
                                             histogram_freq=1,
                                             write_graph=True,
                                             write_images=True)

cnn_model.fit(X_train,
              y_train,
              batch_size=64,
              epochs=1,
              verbose=1,
              validation_split=0.1,
              callbacks=[keras_callback])

我的错误:

AttributeError                            Traceback (most recent call last)
<ipython-input-31-e1e874d24f0c> in <module>
     11               verbose=1,
     12               validation_split=0.1,
---> 13               callbacks=[keras_callback])

c:\users\antoine\appdata\local\programs\python\python37\lib\site-packages\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, validation_freq, max_queue_size, workers, use_multiprocessing, **kwargs)
   1237                                         steps_per_epoch=steps_per_epoch,
   1238                                         validation_steps=validation_steps,
-> 1239                                         validation_freq=validation_freq)
   1240 
   1241     def evaluate(self,

c:\users\antoine\appdata\local\programs\python\python37\lib\site-packages\keras\engine\training_arrays.py in fit_loop(model, fit_function, fit_inputs, out_labels, batch_size, epochs, verbose, callbacks, val_function, val_inputs, shuffle, initial_epoch, steps_per_epoch, validation_steps, validation_freq)
    117         callback_metrics += ['val_' + n for n in model.metrics_names]
    118 
--> 119     callbacks.set_model(callback_model)
    120     callbacks.set_params({
    121         'batch_size': batch_size,

c:\users\antoine\appdata\local\programs\python\python37\lib\site-packages\keras\callbacks\callbacks.py in set_model(self, model)
     66         self.model = model
     67         for callback in self.callbacks:
---> 68             callback.set_model(model)
     69 
     70     def _call_batch_hook(self, mode, hook, batch, logs=None):

c:\users\antoine\appdata\local\programs\python\python37\lib\site-packages\keras\callbacks\tensorboard_v2.py in set_model(self, model)
    114         """Sets Keras model and writes graph if specified."""
    115         model.run_eagerly = False
--> 116         super(TensorBoard, self).set_model(model)

c:\users\antoine\appdata\local\programs\python\python37\lib\site-packages\tensorflow_core\python\keras\callbacks.py in set_model(self, model)
   1530     # possibly distributed settings.
   1531     self._log_write_dir = distributed_file_utils.write_dirpath(
-> 1532         self.log_dir, self.model._get_distribution_strategy())  # pylint: disable=protected-access
   1533 
   1534     with context.eager_mode():

AttributeError: 'Sequential' object has no attribute '_get_distribution_strategy'

我正在使用 Tensorboard 2.1.0、tensorflow 2.1.0、Keras 2.3.1。

谢谢,有需要的可以问我!

【问题讨论】:

  • 你没有使用tensorflow.keras。我认为纯 Keras 没有这些分发策略(不过我可能错了)
  • 我都试过了,没有一个真正起作用

标签: python tensorflow keras callback conv-neural-network


【解决方案1】:

能否请您在使用 keras 的任何地方加上“tf”前缀并导入张量流

  1. 添加代码

    将张量流导入为 tf

  2. 在找到 keras 的地方加上 'tf' 前缀。例如:

来自

from keras.callbacks import TensorBoard
from keras.models import Sequential
from keras.layers import Dense, Dropout, Flatten, Conv2D, MaxPooling2D, BatchNormalization
from keras.utils import to_categorical

from tf.keras.callbacks import TensorBoard
from tf.keras.models import Sequential
from tf.keras.layers import Dense, Dropout, Flatten, Conv2D, MaxPooling2D, BatchNormalization
from tf.keras.utils import to_categorical

【讨论】:

  • 您好,感谢您的帮助。当我应用更改时,我有一个新错误: ('Could not interpret optimizer identifier:', ) 在 cnn_model = get_cnn_model(input_shape, classes) 行上使用我的帖子中的模型,甚至当我尝试更改不起作用的 tensorflow.keras.Sequential() 或 keras.sequential() 时。
  • @Aear: 你更新了model.compile代码如下model.compile(loss=tf.keras.losses.categorical_crossentropy, optimizer=tf.keras.optimizers.Adadelta(), metrics=['accuracy'])请你澄清一下
  • 非常感谢。我在 keras_callback 中添加了一个参数“profile_batch”,以使其正常工作并进行您所说的更改。但是使用 tensorflow.keras.blabla 而不是 keras.blabla 使我的模型训练起来非常慢,在我需要 50 个 epoch 才能达到 98% 的准确率和 0.2 个丢失之前,现在有了 400 个 epochs 我得到了 45% 的 acc 和 1.6 个丢失,是正常吗??
  • @Aear,如果我回答了你的问题,请接受答案并投票。谢谢。
猜你喜欢
  • 2020-04-14
  • 1970-01-01
  • 2020-05-10
  • 2022-01-04
  • 2021-10-23
  • 2021-11-15
  • 2020-01-29
  • 2020-01-03
  • 2020-01-20
相关资源
最近更新 更多