Python 3.x &引用;FusedBatchNorm的CPU实现目前仅支持NHWC张量格式;

Python 3.x &引用;FusedBatchNorm的CPU实现目前仅支持NHWC张量格式;,python-3.x,tensorflow,keras,tf.keras,Python 3.x,Tensorflow,Keras,Tf.keras,我正在尝试重新创建一个模型,并重新生成其已发布的结果。我使用TF2.0,我认为这个模型是用Theano后端编码的。该模型来源于github的上下文 我也不使用tensorflow gpu,因为它与我的硬件设置不兼容 无论如何,一开始我在加载它的权重甚至模型时遇到了很多错误。当我意识到保存/加载功能只是一团糟时,我开始尝试加载和训练模型。因为我使用了Tensorflow,所以我修改了代码以使用'channels\u last'格式,或者NHWC,正如错误所说的那样 这是我的导入列表: 来自未来导入

我正在尝试重新创建一个模型,并重新生成其已发布的结果。我使用TF2.0,我认为这个模型是用Theano后端编码的。该模型来源于github的上下文

我也不使用tensorflow gpu,因为它与我的硬件设置不兼容

无论如何,一开始我在加载它的权重甚至模型时遇到了很多错误。当我意识到保存/加载功能只是一团糟时,我开始尝试加载和训练模型。因为我使用了Tensorflow,所以我修改了代码以使用
'channels\u last'
格式,或者
NHWC
,正如错误所说的那样

这是我的导入列表:

来自未来导入绝对导入
来自未来进口部
来自未来导入打印功能
从未来导入unicode文字
从tensorflow进口keras
进口cv2
导入操作系统
导入路径库
进口舒蒂尔
将matplotlib.pyplot作为plt导入
将numpy作为np导入
导入tensorflow作为tf
修改后的模型:

def createModel():
model=keras.models.Sequential()
添加(keras.layers.Lambda(norm_输入,input_形状=(28,28,1),output_形状=(28,28,1)))
添加模型(keras.layers.Conv2D(32,(3,3)))
model.add(keras.layers.LeakyReLU())
model.add(keras.layers.BatchNormalization(axis=1))
添加模型(keras.layers.Conv2D(32,(3,3)))
model.add(keras.layers.LeakyReLU())
model.add(keras.layers.MaxPooling2D())
model.add(keras.layers.BatchNormalization(axis=1))
model.add(keras.layers.Conv2D(64,(3,3)))
model.add(keras.layers.LeakyReLU())
model.add(keras.layers.BatchNormalization(axis=1))
model.add(keras.layers.Conv2D(64,(3,3)))
model.add(keras.layers.LeakyReLU())
model.add(keras.layers.MaxPooling2D())
model.add(keras.layers.flatte())
model.add(keras.layers.BatchNormalization())
添加模型(keras.layers.Dense(512))
model.add(keras.layers.LeakyReLU())
model.add(keras.layers.BatchNormalization())
模型。添加(keras。层。辍学(0.3))
添加模型(keras.layers.Dense(10,激活='softmax'))
compile(优化器='adam',loss='classifical_crossentropy',metrics=['accurity'])
回归模型
如何加载和预处理MNIST数据集:

(x_列,y_列),(x_测试,y_测试)=keras.dataset.mnist.load_data()
测试标签=y测试
x_-train=x_-train.重塑(x_-train.形状[0],28,28,1)
x_测试=x_测试。重塑(x_测试。形状[0],28,28,1)
x_列=x_列.aType(np.32)
x_检验=x_检验.astype(np.32)
x_列/=255
x_检验/=255
y_-train=keras.utils.to_-categorical(y_-train,10)
y_检验=keras.utils.to_分类(y_检验,10)
ImageDataGenerator

gen=keras.preprocessing.image.ImageDataGenerator(
旋转范围=12,
宽度\偏移\范围=0.1,
剪切范围=0.3,
高度位移范围=0.1,
缩放范围=0.1,
数据\u格式='channels\u last')
最后,培训模型的功能:

def-fit_型号(m):
m、 fit_生成器(批次,每_历元的步数=每_历元的步数,历元=1,详细=0,
验证\数据=测试\批次,验证\步骤=验证\步骤)
m、 optimizer.lr=0.1
m、 fit_生成器(批次,每_历元的步数=每_历元的步数,历元数=4,详细度=0,
验证\数据=测试\批次,验证\步骤=验证\步骤)
m、 optimizer.lr=0.01
m、 fit_生成器(批次,每_历元步数=每_历元步数,历元数=12,详细度=0,
验证\数据=测试\批次,验证\步骤=验证\步骤)
m、 optimizer.lr=0.001
m、 fit_生成器(批次,每_历元的步数=每_历元的步数,历元=18,详细=0,
验证\数据=测试\批次,验证\步骤=验证\步骤)
返回m
最后一个代码片段是错误指向的地方,但我不知道与图像格式相关的具体内容。具体来说,它指向第三行,或以
验证\u data=…
开头的行

完全错误是:

组件函数执行失败:内部:FusedBatchNorm的CPU实现目前仅支持NHWC tensor格式。
[{{node batch_normalization_v2/cond/then/_0/FusedBatchNorm}}]
和回溯:

回溯(最近一次呼叫最后一次):
文件“model3.py”,第113行,在
m=拟合模型(createModel())
文件“model3.py”,第52行,在fit_模型中
验证\数据=测试\批次,验证\步骤=验证\步骤)
fit_generator中的文件“/home/ren/.local/lib/python3.6/site packages/tensorflow/python/keras/engine/training.py”,第1515行
步骤(名称=“每个时代的步骤”)
文件“/home/ren/.local/lib/python3.6/site packages/tensorflow/python/keras/engine/training\u generator.py”,第257行,在模型迭代中
批处理输出=批处理功能(*批处理数据)
文件“/home/ren/.local/lib/python3.6/site-packages/tensorflow/python/keras/engine/training.py”,第1259行,在批量生产中
输出=self._fit_函数(ins)35; pylint:disable=不可调用
文件“/home/ren/.local/lib/python3.6/site packages/tensorflow/python/keras/backend.py”,第3217行,在调用中__
输出=自。\图形\ fn(*转换的\输入)
文件“/home/ren/.local/lib/python3.6/site packages/tensorflow/python/eager/function.py”,第558行,在调用中__
返回自我。呼叫平面(args)
文件“/home/ren/.local/lib/python3.6/site packages/tensorflow/python/eager/function.py”,第627行,位于调用平面中
输出=自我推理函数调用(ctx,args)
调用中第415行的文件“/home/ren/.local/lib/python3.6/site packages/tensorflow/python/eager/function.py”
ctx=ctx)
文件“/home/ren/.local/lib/python3.6/site packages/tensorflow/python/eager/execute.py”,第66行,在quick_execute中
六、将_从(核心状态)提升到_异常(例如代码、消息),无
文件“”,第行
model.add(keras.layers.Permute((2, 3, 1)))
model.add(keras.layers.BatchNormalization(axis=-1))
model.add(keras.layers.Permute((3, 1, 2)))