首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Keras + CNTK: TensorSliceWithMBLayoutFor

Keras + CNTK: TensorSliceWithMBLayoutFor
EN

Stack Overflow用户
提问于 2017-08-31 14:43:30
回答 1查看 252关注 0票数 2

在将使用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_trainY_trainX_valY_val都是(num_slices, img_width, img_height, num_channels)形状的

我一直遇到的错误如下:

回溯(最近一次调用): 文件"TrainNetwork_CNTK.py",第188行,在 历史= model.fit(X_train,Y_train,epochs=trainingEpochs,verbose=2,shuffle=True,validation_data=(X_val,Y_val),callbacks=cb_list) 文件"C:\Users...\site-packages\keras\engine\training.py",第1430行,适配 initial_epoch=initial_epoch) 文件"C:\Users...\site-packages\keras\engine\training.py",第1079行,在_fit_loop中 outs = f(ins_batch) 文件"C:\Users...\site-packages\keras\backend\cntk_backend.py",第1664行,在call中 input_dict,self.trainer_output) 文件"C:\Users...\site-packages\cntk\train\trainer.py",第160行,在train_minibatch中 output_map,设备) 文件“C:\Users.\site-packages\cntk\cntk_py.py”,第2769行,在train_minibatch中 返回_cntk_py.Trainer_train_minibatch(self,*args) RuntimeError:节点'UserDefinedFunction2738‘(UserDefinedV2Function操作):TensorSliceWithMBLayoutFor: FrameRange的动态轴与数据不一致:

这里似乎很少有关于CNTK问题的活动,所以任何试图为这个问题发光的东西都会很有帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-09 04:51:34

原因是损失函数:

代码语言:javascript
复制
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)和默认的轴选项,它将对所有轴应用减和以获得一个标度,因此我们应该得到相同的结果,而不必将其扁平化。我尝试了下面的损失函数,它看起来很有效:

代码语言:javascript
复制
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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45984253

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档