是否可以根据Keras中的输入实现层间切换?
在Keras中实现这样结构的神经网络是可能的吗 其思路如下: 在输入中,模型接收一个整数i(标记为红色)和一些其他东西v(图中为0.12345)。接下来,有几个类似的平行层。根据i的值,v进入i第th层,忽略其他层,然后该层的输出进入输出层是否可以根据Keras中的输入实现层间切换?,keras,Keras,在Keras中实现这样结构的神经网络是可能的吗 其思路如下: 在输入中,模型接收一个整数i(标记为红色)和一些其他东西v(图中为0.12345)。接下来,有几个类似的平行层。根据i的值,v进入i第th层,忽略其他层,然后该层的输出进入输出层 换句话说,除了i之外的所有层都被忽略。如果我正确理解了您的问题,我认为这里最简单的解决方案是根据i的值分离数据集 因此,把你的X_列分为X_列,X_列,等等。同样地,用你的X_测试,把它分为X_测试,X_测试,等等 from keras.models im
换句话说,除了i之外的所有层都被忽略。如果我正确理解了您的问题,我认为这里最简单的解决方案是根据
i
的值分离数据集
因此,把你的X_列
分为X_列
,X_列
,等等。同样地,用你的X_测试
,把它分为X_测试
,X_测试
,等等
from keras.models import Sequential, Model
from keras.layers import *
from keras.utils import plot_model
然后设置单独的模型:
model1 = Sequential()
model1.add(Conv2D(32, kernel_size=(3,3), activation="relu", input_shape=(24,24,3)))
model1.add(MaxPooling2D(pool_size=(2,2)))
model1.add(Flatten())
model1.add(Dropout(0.5))
model1.add(Dense(512, activation = "relu"))
您需要使用函数式API来组合它们。我使用了Concatenate()
,文档中显示了其他选项
现在配置最终模型,指定输入和输出:
model = Model(inputs=[model1.inputs, model2.inputs], outputs=outputs)
检查model.summary()
,您可以看到每个层是如何连接的:
__________________________________________________________________________________________________
Layer (type) Output Shape Param # Connected to
==================================================================================================
conv2d_input (InputLayer) [(None, 24, 24, 3)] 0
__________________________________________________________________________________________________
conv2d_1_input (InputLayer) [(None, 24, 24, 3)] 0
__________________________________________________________________________________________________
conv2d (Conv2D) (None, 22, 22, 32) 896 conv2d_input[0][0]
__________________________________________________________________________________________________
conv2d_1 (Conv2D) (None, 22, 22, 32) 896 conv2d_1_input[0][0]
__________________________________________________________________________________________________
max_pooling2d (MaxPooling2D) (None, 11, 11, 32) 0 conv2d[0][0]
__________________________________________________________________________________________________
max_pooling2d_1 (MaxPooling2D) (None, 11, 11, 32) 0 conv2d_1[0][0]
__________________________________________________________________________________________________
flatten (Flatten) (None, 3872) 0 max_pooling2d[0][0]
__________________________________________________________________________________________________
flatten_1 (Flatten) (None, 3872) 0 max_pooling2d_1[0][0]
__________________________________________________________________________________________________
dropout (Dropout) (None, 3872) 0 flatten[0][0]
__________________________________________________________________________________________________
dropout_1 (Dropout) (None, 3872) 0 flatten_1[0][0]
__________________________________________________________________________________________________
dense (Dense) (None, 512) 1982976 dropout[0][0]
__________________________________________________________________________________________________
dense_1 (Dense) (None, 512) 1982976 dropout_1[0][0]
__________________________________________________________________________________________________
concatenate (Concatenate) (None, 1024) 0 dense[0][0]
dense_1[0][0]
__________________________________________________________________________________________________
dense_2 (Dense) (None, 256) 262400 concatenate[0][0]
__________________________________________________________________________________________________
dropout_2 (Dropout) (None, 256) 0 dense_2[0][0]
__________________________________________________________________________________________________
dense_3 (Dense) (None, 5) 1285 dropout_2[0][0]
==================================================================================================
Total params: 4,231,429
Trainable params: 4,231,429
Non-trainable params: 0
__________________________________________________________________________________________________
但是使用plot\u model(model,to\u file='image.png',show\u shapes=True)更容易可视化模型
:
然后,为了训练模型,您需要输入不同的输入,不要忘记您的测试(或验证)数据:
注意:子模型(此处为
model1
,model2
等)不必具有相同的结构。它们可以有不同大小的层、不同数量的层和不同类型的层。这也是如何在模型中包含具有不同类型功能的数据集。如果我正确理解了您的问题,我认为这里最简单的解决方案是根据I
的值分离数据集
因此,把你的X_列
分为X_列
,X_列
,等等。同样地,用你的X_测试
,把它分为X_测试
,X_测试
,等等
from keras.models import Sequential, Model
from keras.layers import *
from keras.utils import plot_model
然后设置单独的模型:
model1 = Sequential()
model1.add(Conv2D(32, kernel_size=(3,3), activation="relu", input_shape=(24,24,3)))
model1.add(MaxPooling2D(pool_size=(2,2)))
model1.add(Flatten())
model1.add(Dropout(0.5))
model1.add(Dense(512, activation = "relu"))
您需要使用函数式API来组合它们。我使用了Concatenate()
,文档中显示了其他选项
现在配置最终模型,指定输入和输出:
model = Model(inputs=[model1.inputs, model2.inputs], outputs=outputs)
检查model.summary()
,您可以看到每个层是如何连接的:
__________________________________________________________________________________________________
Layer (type) Output Shape Param # Connected to
==================================================================================================
conv2d_input (InputLayer) [(None, 24, 24, 3)] 0
__________________________________________________________________________________________________
conv2d_1_input (InputLayer) [(None, 24, 24, 3)] 0
__________________________________________________________________________________________________
conv2d (Conv2D) (None, 22, 22, 32) 896 conv2d_input[0][0]
__________________________________________________________________________________________________
conv2d_1 (Conv2D) (None, 22, 22, 32) 896 conv2d_1_input[0][0]
__________________________________________________________________________________________________
max_pooling2d (MaxPooling2D) (None, 11, 11, 32) 0 conv2d[0][0]
__________________________________________________________________________________________________
max_pooling2d_1 (MaxPooling2D) (None, 11, 11, 32) 0 conv2d_1[0][0]
__________________________________________________________________________________________________
flatten (Flatten) (None, 3872) 0 max_pooling2d[0][0]
__________________________________________________________________________________________________
flatten_1 (Flatten) (None, 3872) 0 max_pooling2d_1[0][0]
__________________________________________________________________________________________________
dropout (Dropout) (None, 3872) 0 flatten[0][0]
__________________________________________________________________________________________________
dropout_1 (Dropout) (None, 3872) 0 flatten_1[0][0]
__________________________________________________________________________________________________
dense (Dense) (None, 512) 1982976 dropout[0][0]
__________________________________________________________________________________________________
dense_1 (Dense) (None, 512) 1982976 dropout_1[0][0]
__________________________________________________________________________________________________
concatenate (Concatenate) (None, 1024) 0 dense[0][0]
dense_1[0][0]
__________________________________________________________________________________________________
dense_2 (Dense) (None, 256) 262400 concatenate[0][0]
__________________________________________________________________________________________________
dropout_2 (Dropout) (None, 256) 0 dense_2[0][0]
__________________________________________________________________________________________________
dense_3 (Dense) (None, 5) 1285 dropout_2[0][0]
==================================================================================================
Total params: 4,231,429
Trainable params: 4,231,429
Non-trainable params: 0
__________________________________________________________________________________________________
但是使用plot\u model(model,to\u file='image.png',show\u shapes=True)更容易可视化模型
:
然后,为了训练模型,您需要输入不同的输入,不要忘记您的测试(或验证)数据:
注意:子模型(此处为
model1
,model2
等)不必具有相同的结构。它们可以有不同大小的层、不同数量的层和不同类型的层。这也是如何在模型中包含具有不同类型特征的数据集的方法。您应该清楚地添加特殊图层的规格,希望它更有用。这是否回答了您的问题?我相信前面的这些问题可以回答这个问题:而且@ashraful我很抱歉没有足够清楚地阐述这个问题。我用更详细的信息更新了这个问题description@cddt恐怕它们不相关。我用更详细的描述更新了我的问题,使它更清晰。你应该清楚地添加你的特殊层的规范,希望它会更有用。这回答了你的问题吗?我相信前面的这些问题可以回答这个问题:而且@ashraful我很抱歉没有足够清楚地阐述这个问题。我用更详细的信息更新了这个问题description@cddt恐怕它们不相关。我用更详细的描述更新了我的问题,使之更清楚