tensorflow 2.15 后端
inp = layers.Input(batch_shape=batch_shape)
print('Input {}'.format(str(inp.shape)))
输入 (1, 7, 60, 60, 1)
x = inp
x = layers.Dropout(0.2)(x)
x = layers.LayerNormalization()(x)
x = layers.Conv2D(filters = 16, kernel_size = (3,3), activation = 'relu', padding = 'same')(x)
print(1, x)
1 KerasTensor(type_spec=TensorSpec(shape=(1, 7, 60, 60, 16), dtype=tf.float32, name=无), name='conv2d/Relu:0', description="由层 'conv2d' 创建")
x = layers.MaxPooling3D(pool_size = (1, 2, 2))(x),
print(2, x)
2 (<KerasTensor: shape=(1, 7, 30, 30, 16) dtype=float32 (创建按层 'max_pooling3d')>,)
为什么输出 2 是张量的元组而不是简单的张量? (也获得大小为 2, 2, 2 的元组结果)
来自 Keras MaxPooling3D:
输出形状
如果 data_format="channels_last": 5D 张量,形状为:(batch_size, pooled_dim1, pooled_dim2, pooled_dim3,频道)
问题出在代码中的这个逗号:
x = layers.MaxPooling3D(pool_size = (1, 2, 2))(x),
^^^^
这个逗号导致 Python 创建了一个包含
MaxPooling3D
层输出的元组。删除逗号即可解决问题:
x = layers.MaxPooling3D(pool_size = (1, 2, 2))(x)
这样一来,
x
就会像预期的那样成为单个 KerasTensor,而不是包含单个 KerasTensor 的元组。