我尝试使用spyder运行此segmentation model。
当我运行na
时,我会收到此消息
create_train_data中第19行的文件“ C:/Users/achaire/Downloads/Compressed/ultrasound-nerve-segmentation-master/ultrasound-nerve-segmentation-master/data.py” imgs = np.ndarray((total,image_rows,image_cols),dtype = np.uint8)
TypeError:“ float”对象不能解释为整数
代码是:
data.py
我在第 18 和 19 行中用**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 行,并用total = int(len(images) / 2)
替换了{{1}强>。问题解决了。
我运行np.uint8
时收到此消息
float
我拥有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'
和anaconda
的最新版本...
答案 0 :(得分:1)
答案1: 如果仅当您使用较小的数据集时才发生错误,则很有可能使用的数据集足够小,以致验证集中没有单个样本。
因此它无法计算验证损失。
答案2: 我投票赞成前面的答案,因为它可以让我深入了解fit_generator函数的数据和输入,并找出问题的根本原因是什么。总之,在我的数据集很小的情况下,我计算出了validation_steps和steps_per_epoch,结果为零(0),这导致了错误。
我认为对于Keras团队来说,更好的长期答案是,当这些值均为零时,在fit_generator中导致错误/异常,这可能会导致对如何解决此问题有更好的理解。
答案3: 之所以发生错误,是因为我们忘记了在使用“回调”时使用fit()方法设置validation_data:[keras.callbacks.EarlyStopping(monitor ='val_loss',patience = 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/
答案 1 :(得分:1)
我遇到了相同的错误,并在训练时通过将verbose = 0
设置为错误。
答案 2 :(得分:0)
我有同样的问题。如果问题出在您的fit_generator
期间,则很有可能在data_generator
代码中存在一些小错误。调试您的fit_generator
。