首页 > 解决方案 > AttributeError:“ProgbarLogger”对象没有属性“log_values”

问题描述

我曾尝试使用 spyder运行此分割模型。当我运行时data.py,我收到此消息

文件“C:/Users/achaire/Downloads/Compressed/ultrasound-nerve-segmentation-master/ultrasound-nerve-segmentation-master/data.py”,第 19 行,在 create_train_data imgs = np.ndarray((total, image_rows, image_cols), dtype=np.uint8)

TypeError:'float' 对象不能解释为整数

代码是:

**14** def create_train_data():
**15** train_data_path = os.path.join(data_path, 'train')
**16** images = os.listdir(train_data_path)
**17** total = len(images) / 2

**18** imgs = np.ndarray((total, image_rows, image_cols), dtype=np.uint8)
**19** imgs_mask = np.ndarray((total, image_rows, image_cols), dtype=np.uint8)

我已经将第17行替换为第18total = int(len(images) / 2)和第19行。问题已经解决了。np.uint8float

当我跑步时,train.py我有这个消息

runfile('C:/Users/achaire/Downloads/Compressed/ultrasound-nerve-segmentation-master/ultrasound-nerve-segmentation-master/train.py', wdir='C:/Users/achaire/Downloads/Compressed/ultrasound-nerve-segmentation-master/ultrasound-nerve-segmentation-master')
------------------------------
Loading and preprocessing train data...
------------------------------
------------------------------
Creating and compiling model...
------------------------------
C:\Users\achaire\Anaconda3\lib\site-packages\numpy\core\fromnumeric.py:3118: RuntimeWarning: Mean of empty slice.
  out=out, **kwargs)
C:\Users\hamdi\Anaconda3\lib\site-packages\numpy\core\_methods.py:140: RuntimeWarning: Degrees of freedom <= 0 for slice
  keepdims=keepdims)
------------------------------
Fitting model...
------------------------------
C:/Users/achaire/Downloads/Compressed/ultrasound-nerve-segmentation-master/ultrasound-nerve-segmentation-master/train.py:119: UserWarning: The `nb_epoch` argument in `fit` has been renamed `epochs`.
  callbacks=[model_checkpoint])
Train on 0 samples, validate on 0 samples
Epoch 1/20
Traceback (most recent call last):

  File "<ipython-input-15-f713d62eb4dc>", line 1, in <module>
    runfile('C:/Users/achaire/Downloads/Compressed/ultrasound-nerve-segmentation-master/ultrasound-nerve-segmentation-master/train.py', wdir='C:/Users/achaire/Downloads/Compressed/ultrasound-nerve-segmentation-master/ultrasound-nerve-segmentation-master')

  File "C:\Users\achaire\Anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line 827, in runfile
    execfile(filename, namespace)

  File "C:\Users\achaire\Anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line 110, in execfile
    exec(compile(f.read(), filename, 'exec'), namespace)

  File "C:/Users/achaire/Downloads/Compressed/ultrasound-nerve-segmentation-master/ultrasound-nerve-segmentation-master/train.py", line 153, in <module>
    train_and_predict()

  File "C:/Users/achaire/Downloads/Compressed/ultrasound-nerve-segmentation-master/ultrasound-nerve-segmentation-master/train.py", line 119, in train_and_predict
    callbacks=[model_checkpoint])

  File "C:\Users\achaire\Anaconda3\lib\site-packages\keras\engine\training.py", line 1039, in fit
    validation_steps=validation_steps)

  File "C:\Users\achaire\Anaconda3\lib\site-packages\keras\engine\training_arrays.py", line 217, in fit_loop
    callbacks.on_epoch_end(epoch, epoch_logs)

  File "C:\Users\achaire\Anaconda3\lib\site-packages\keras\callbacks.py", line 79, in on_epoch_end
    callback.on_epoch_end(epoch, logs)

  File "C:\Users\achaire\Anaconda3\lib\site-packages\keras\callbacks.py", line 338, in on_epoch_end
    self.progbar.update(self.seen, self.log_values)

AttributeError: 'ProgbarLogger' object has no attribute 'log_values'

我有最后一个版本anacondakeras并且python...

标签: pythonnumpykerasdeep-learningspyder

解决方案


答案 1:如果错误仅在您使用较小的数据集时发生,那么您很可能使用的数据集小到在验证集中没有单个样本。

因此它无法计算验证损失。

答案 2:我对上一个答案投了赞成票,因为它让我有见识来验证 fit_generator 函数的数据和输入,并找出问题的根本原因。总之,在我的数据集很小的情况下,我计算了validation_steps 和steps_per_epoch,结果是零(0)导致了错误。

我想,也许对 Keras 团队来说,更好的长期答案是当这些值为零时在 fit_generator 中导致错误/异常,这可能会导致更好地理解如何解决这个问题。

答案 3:我们发生错误是因为我们忘记在 fit() 方法中设置validation_data,而使用了'callbacks':[keras.callbacks.EarlyStopping(monitor='val_loss', patient=1)],

导致错误的代码是:

self.model.fit(
        x=x_train,
        y=y_train,
        callbacks=[keras.callbacks.EarlyStopping(monitor='val_loss', patience=1)],
        verbose=True)
Adding validation_data=(self.x_validate, self.y_validate), in fit() fixed:

self.model.fit(
        x=x_train,
        y=y_train,
        callbacks=[keras.callbacks.EarlyStopping(monitor='val_loss', patience=1)],
        validation_data=(x_validate, y_validate),
        verbose=True)

回答 4:由于数据集较小而出现此错误,为了解决此问题,增加火车时间并将火车集拆分为 80:20。

参考:https ://inneka.com/ml/kr/keras-early-stopping-callback-error-val_loss-metric-not-available/


推荐阅读