我正在使用带有tensorflow的Keras作为后端。我正在尝试为图像标准化定义Lambda层。当我尝试将Lamba层的输出提供给另一个Conv2D层时,出现错误:
使用非符号张量的输入调用了层conv2d_1
我阅读了Lamba层上的在线资料,每个人似乎都以与我相同的方式进行操作,但是我的代码以某种方式失败了。我只定义了一个预处理功能,并将图像传递给它。
def pre_process(image):
norm = cv2.normalize(image, None, alpha=0, beta=1,
norm_type=cv2.NORM_MINMAX, dtype=cv2.CV_32F)
return norm
input_layer = Input(shape=(size, size, chs))
norm = Lambda(pre_process, output_shape=(size, size, chs))
conv_1 = Conv2D(16, kernel_size=(1, 1), strides=(1, 1),
padding='valid', activation='relu')(norm)
定义conv_1
层时出现错误:
使用不是符号张量的输入调用了层conv2d_1。收到的类型:。完整输入:[]。该层的所有输入都应为张量。
编辑1:
我修改了代码并遇到新的错误。新代码如下:
def pre_process(image):
return tf.image.per_image_standardization(image[0])
img_shape = (size, size, chs)
input_layer = Input(shape=(img_shape))
norm = Lambda(pre_process)(input_layer)
conv_1 = Conv2D(16, kernel_size=(1, 1), strides=(1, 1), padding='valid', activation='relu')(norm)
归一化之后,由于我将形状从(1,w,h,3)更改为(w,h,3),因此出现错误:
ValueError:输入0与conv2d_2层不兼容:预期ndim = 4,找到ndim = 3
默认情况下,Lambda层应与输入层具有相同的形状,但实际情况并非如此。如何确保形状保持不变?
答案 0 :(得分:1)
您没有使用输入调用lambda层,您应该这样做:
AdController.instance.showInterstitial();