【发布时间】:2018-12-25 14:12:14
【问题描述】:
我正在两个不同的 keras 层之间实现自定义连接。神经网络开始如下:
from tensorflow.keras.layers import Dense, Conv2D, Flatten, AveragePooling2D
import tensorflow as tf
from keras.models import Model
from tensorflow.keras.layers import Conv2D, Input, Concatenate, Lambda, Add
inputTensor = Input(shape=( 32, 32,1))
stride = 1
c1 = Conv2D(6, kernel_size=[5,5], strides=(stride,stride), padding="valid", input_shape=(32,32,1),
activation = 'tanh')(inputTensor)
s2 = AveragePooling2D(pool_size=(2, 2), strides=(2, 2))(c1)
在这里,我想将我的自定义连接应用到输出大小为 10*10*16 的卷积层 c3(即需要在大小为 14*14*6 的 s2 上应用 16 个过滤器并获得输出10 * 10 * 16)。为此,我需要使用kernal_size = 5*5、filers=16、stride = 1 和padding=valid。
对于我的自定义连接,我想单独使用它们,而不是一次使用 s2 的所有 6 个特征图。我使用lambda函数如下:
例如,如果我想使用 s2 的第零个特征图并在其上应用 1 个过滤器,我正在执行以下操作:
group0_a = Lambda(lambda x: x[:,:,:,0], output_shape=lambda x: (x[0], x[1], x[2], 1))(s2)
conv_group0_a = Conv2D(1, kernel_size=[5,5], strides=(stride,stride), padding="valid", activation = 'tanh')(group0_a)
现在,我得到一个错误:
Input 0 of layer conv2d_10 is incompatible with the layer: expected ndim=4, found ndim=3. Full shape received: [None, 14, 14] 代表group0_a
【问题讨论】:
标签: python keras neural-network conv-neural-network