我正在尝试构建一个如下所示的神经网络模型:
input | hidden / \hidden output2 |output1
这里是一个简单的代码示例:
model = Sequential()model.add(Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=input_shape))model.add(Conv2D(64, (3, 3), activation='relu'))model.add(MaxPooling2D(pool_size=(2, 2)))model.add(Flatten()) # 从这里开始我想添加一个新的神经网络model.add(Dense(128, activation='relu'))model.add(Dense(num_classes, activation='softmax'))
如何得到预期的模型?
如果我问了一个愚蠢的问题,请原谅,我在人工智能领域还是一个初学者。
回答:
你可以使用keras的函数式API而不是顺序API来实现,如下所示:
from keras.models import Modelfrom keras.layers import Inputfrom keras.layers import Densefrom keras.layers import Flattenfrom keras.layers.convolutional import Conv2Dfrom keras.layers.pooling import MaxPooling2Dnum_classes = 10inp= Input(shape=input_shape)conv1 = Conv2D(32, kernel_size=(3,3), activation='relu')(inp)conv2 = Conv2D(64, (3, 3), activation='relu')(conv1)max_pool = MaxPooling2D(pool_size=(2, 2))(conv2)flat = Flatten()(max_pool)hidden1 = Dense(128, activation='relu')(flat)output1 = Dense(num_classes, activation='softmax')(hidden1)hidden2 = Dense(10, activation='relu')(flat) #指定隐藏单元的数量output2 = Dense(3, activation='softmax')(hidden2) #指定类别的数量model = Model(inputs=inp, outputs=[output1 ,output2])
你的网络看起来像这样:
Model: "model_1"__________________________________________________________________________________________________Layer (type) Output Shape Param # Connected to ==================================================================================================input_7 (InputLayer) (None, 64, 256, 256) 0 __________________________________________________________________________________________________conv2d_10 (Conv2D) (None, 62, 254, 32) 73760 input_7[0][0] __________________________________________________________________________________________________conv2d_11 (Conv2D) (None, 60, 252, 64) 18496 conv2d_10[0][0] __________________________________________________________________________________________________max_pooling2d_4 (MaxPooling2D) (None, 30, 126, 64) 0 conv2d_11[0][0] __________________________________________________________________________________________________flatten_4 (Flatten) (None, 241920) 0 max_pooling2d_4[0][0] __________________________________________________________________________________________________dense_6 (Dense) (None, 128) 30965888 flatten_4[0][0] __________________________________________________________________________________________________dense_8 (Dense) (None, 10) 2419210 flatten_4[0][0] __________________________________________________________________________________________________dense_7 (Dense) (None, 10) 1290 dense_6[0][0] __________________________________________________________________________________________________dense_9 (Dense) (None, 3) 33 dense_8[0][0] ==================================================================================================Total params: 33,478,677Trainable params: 33,478,677Non-trainable params: 0