解决CPU中不支持NHWC的数据输入形式

本人在使用残差网络进行训练模型时,在GPU上运行程序没有问题,然而在CPU上跑程序时则出现了以下问题

InvalidArgumentError:  Conv2DCustomBackpropFilterOp only supports NHWC.
	 [[node Conv2DBackpropFilter (defined at E:\anaconda\envs\tf2\lib\site-packages\tensorflow_core\python\framework\ops.py:1751) ]] [Op:__inference_distributed_function_2090]

Function call stack:
distributed_function

本人使用的时TF2.0,并且将输入数据形式改为channel_first,但其实TF2.0中默认的是channel_last,且CPU版本中的卷积不支持这种形式,最好不要轻易去改为channel_first,我在笔记本上安装了GPU版本跑完之后最后发现转换为tflite模型时,仍然不支持NHWC的形式,所以一定一定不要轻易改输入数据形式。

解决方案:

将数据从NCHW转换为NHWC的形式,并将tf默认的输入数据形式还原为默认的channel_last

数据转换代码如下:

tf.keras.backend.set_image_data_format('channels_last')
temp_x_train = []
for i in range(len(x_train)):
    new_x_train_row=np.moveaxis(x_train[i],0,2)
    temp_x_train.append(new_x_train_row)
x_train = np.array(temp_x_train)

20210128更新

今日使用tf1 + keras的小伙伴找到我,在进行了一些列操作后仍然有问题,最后经历各种复现后通过更新了keras版本解决了问题

使用tf1的同学可以尝试将tf 及keras更换至下述版本

tensorflow == 1.8.0

Keras == 2.1.6

 

 

如果还有问题,欢迎联系本人QQ:2495414744.

 

 

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值