Keras Lambda 层输出不是 "symbolic tensor"

标签 keras keras-layer

我使用 Keras 和 tensorflow 作为后端。我正在尝试定义一个用于图像标准化的 Lambda 层。当我尝试将 Lamba 层的输出提供给另一个 Conv2D 层时,出现错误:

Layer conv2d_1 was called with an input that isn't a symbolic tensor

我阅读了有关 Lamba 层的在线 Material ,每个人似乎都按照我所做的方式进行操作,但不知何故我的代码失败了。我简单地定义了一个预处理函数并通过它传递图像。

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 层时出现错误:

Layer conv2d_1 was called with an input that isn't a symbolic tensor. Received type: . Full input: []. All inputs to the layer should be tensors.

编辑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: Input 0 is incompatible with layer conv2d_2: expected ndim=4, found ndim=3

默认情况下,Lambda 层应采用与输入层相同的形状,但这里情况并非如此。如何确保形状保持不变?

最佳答案

您没有使用输入调用 lambda 层,您应该这样做:

input_layer = Input(shape=(size, size, chs))
norm = Lambda(pre_process, output_shape=(size, size, chs))(input_layer)
conv_1 = Conv2D(16, kernel_size=(1, 1), strides=(1, 1), 
                    padding='valid', activation='relu')(norm)

关于Keras Lambda 层输出不是 "symbolic tensor",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54141897/

相关文章:

python - 训练精度非常高,训练过程中损失低,但分类效果不好

python - 在 Keras 上合并图层(点积)

python - 在 Keras 中编写没有 y_true 的自定义损失函数

python - 使用tensorflow 2进行模型子类化时出现ValueError

python-2.7 - ValueError : Tensor:(. ..) 不是该图的元素

python - 无法将 'auto' 转换为 dtype float 的 EagerTensor

tensorflow - 与 keras 进行注意卷积

python - 无法将keras模型转换为tensorflow : type object 'Dense' has no attribute 'from_config'

python - 在keras中卡住卷积层的正确方法是什么

python - 迁移学习失败,因为密集层预计具有形状(无,1)