Keras + CNTK:TensorSliceWithMBLayoutFor
Keras + CNTK: TensorSliceWithMBLayoutFor
我 运行 在将使用 Keras+Tensorflow 后端完成的图像分割代码迁移到 Keras+CNTK 后端时遇到了一些问题。该代码与 TF 后端完美运行,但与 CNTK 崩溃。
该模型的灵感来自 https://github.com/jocicmarko/ultrasound-nerve-segmentation/blob/master/train.py
模型输入定义为 inputs = Input((img_width, img_height, num_channels))
,其中 num_channels = 1
。
错误来自试图拟合模型的行:
model.fit(X_train, Y_train, epochs=trainingEpochs, verbose=2, shuffle=True, validation_data=(X_val, Y_val), callbacks=cb_list)
其中X_train
、Y_train
、X_val
、Y_val
的形状都是(num_slices, img_width, img_height, num_channels)
我不断收到的错误如下:
Traceback (most recent call last):
File "TrainNetwork_CNTK.py", line 188, in
history = model.fit(X_train, Y_train, epochs=trainingEpochs, verbose=2, shuffle=True, validation_data=(X_val, Y_val), callbacks=cb_list)
File "C:\Users...\site-packages\keras\engine\training.py", line 1430, in fit
initial_epoch=initial_epoch)
File "C:\Users...\site-packages\keras\engine\training.py", line 1079, in _fit_loop
outs = f(ins_batch)
File "C:\Users...\site-packages\keras\backend\cntk_backend.py", line 1664, in call
input_dict, self.trainer_output)
File "C:\Users...\site-packages\cntk\train\trainer.py", line 160, in train_minibatch
output_map, device)
File "C:\Users...\site-packages\cntk\cntk_py.py", line 2769, in train_minibatch
return _cntk_py.Trainer_train_minibatch(self, *args)
RuntimeError: Node 'UserDefinedFunction2738' (UserDefinedV2Function operation): TensorSliceWithMBLayoutFor: FrameRange's dynamic axis is inconsistent with data:
SO 中关于 CNTK 问题的内容似乎很少activity,所以任何试图阐明这个问题的东西都会非常有帮助!
原因是损失函数:
def dice_coef(y_true, y_pred):
y_true_f = K.flatten(y_true)
y_pred_f = K.flatten(y_pred)
intersection = K.sum(y_true_f * y_pred_f)
return (2. * intersection + smooth) / (K.sum(y_true_f) + K.sum(y_pred_f) + smooth)
cntk_keras'展平实施存在一个已知问题,导致批量轴形状与这种情况不匹配。不幸的是,我没有机会修复它:(
但是对于你的情况,我认为我们不需要在这里展平,对吧?当您使用带有默认轴选项的 K.sum(x) 时,它将对所有轴应用缩减和以获得比例,我们应该得到相同的结果而不展平它。我尝试了下面的损失函数,它似乎有效:
def dice_coef(y_true, y_pred):
intersection = K.sum(y_true * y_pred)
return (2. * intersection + smooth) / (K.sum(y_true_f) + K.sum(y_pred_f) + smooth)
我 运行 在将使用 Keras+Tensorflow 后端完成的图像分割代码迁移到 Keras+CNTK 后端时遇到了一些问题。该代码与 TF 后端完美运行,但与 CNTK 崩溃。
该模型的灵感来自 https://github.com/jocicmarko/ultrasound-nerve-segmentation/blob/master/train.py
模型输入定义为 inputs = Input((img_width, img_height, num_channels))
,其中 num_channels = 1
。
错误来自试图拟合模型的行:
model.fit(X_train, Y_train, epochs=trainingEpochs, verbose=2, shuffle=True, validation_data=(X_val, Y_val), callbacks=cb_list)
其中X_train
、Y_train
、X_val
、Y_val
的形状都是(num_slices, img_width, img_height, num_channels)
我不断收到的错误如下:
Traceback (most recent call last):
File "TrainNetwork_CNTK.py", line 188, in
history = model.fit(X_train, Y_train, epochs=trainingEpochs, verbose=2, shuffle=True, validation_data=(X_val, Y_val), callbacks=cb_list)
File "C:\Users...\site-packages\keras\engine\training.py", line 1430, in fit
initial_epoch=initial_epoch)
File "C:\Users...\site-packages\keras\engine\training.py", line 1079, in _fit_loop
outs = f(ins_batch)
File "C:\Users...\site-packages\keras\backend\cntk_backend.py", line 1664, in call
input_dict, self.trainer_output)
File "C:\Users...\site-packages\cntk\train\trainer.py", line 160, in train_minibatch
output_map, device)
File "C:\Users...\site-packages\cntk\cntk_py.py", line 2769, in train_minibatch
return _cntk_py.Trainer_train_minibatch(self, *args)
RuntimeError: Node 'UserDefinedFunction2738' (UserDefinedV2Function operation): TensorSliceWithMBLayoutFor: FrameRange's dynamic axis is inconsistent with data:
SO 中关于 CNTK 问题的内容似乎很少activity,所以任何试图阐明这个问题的东西都会非常有帮助!
原因是损失函数:
def dice_coef(y_true, y_pred):
y_true_f = K.flatten(y_true)
y_pred_f = K.flatten(y_pred)
intersection = K.sum(y_true_f * y_pred_f)
return (2. * intersection + smooth) / (K.sum(y_true_f) + K.sum(y_pred_f) + smooth)
cntk_keras'展平实施存在一个已知问题,导致批量轴形状与这种情况不匹配。不幸的是,我没有机会修复它:(
但是对于你的情况,我认为我们不需要在这里展平,对吧?当您使用带有默认轴选项的 K.sum(x) 时,它将对所有轴应用缩减和以获得比例,我们应该得到相同的结果而不展平它。我尝试了下面的损失函数,它似乎有效:
def dice_coef(y_true, y_pred):
intersection = K.sum(y_true * y_pred)
return (2. * intersection + smooth) / (K.sum(y_true_f) + K.sum(y_pred_f) + smooth)