更新时间:2022-12-11 11:42:48
您可以使用函数式 API 模型并将四个不同的组分开:
You can use the functional API model and separate four distinct groups:
from keras.models import Model
from keras.layers import Dense, Input, Concatenate, Lambda
inputTensor = Input((8,))
首先,我们可以使用 lambda 层将这个输入分成四部分:
First, we can use lambda layers to split this input in four:
group1 = Lambda(lambda x: x[:,:2], output_shape=((2,)))(inputTensor)
group2 = Lambda(lambda x: x[:,2:4], output_shape=((2,)))(inputTensor)
group3 = Lambda(lambda x: x[:,4:6], output_shape=((2,)))(inputTensor)
group4 = Lambda(lambda x: x[:,6:], output_shape=((2,)))(inputTensor)
现在我们关注网络:
#second layer in your image
group1 = Dense(1)(group1)
group2 = Dense(1)(group2)
group3 = Dense(1)(group3)
group4 = Dense(1)(group4)
在我们连接最后一层之前,我们连接上面的四个张量:
Before we connect the last layer, we concatenate the four tensors above:
outputTensor = Concatenate()([group1,group2,group3,group4])
最后一层:
outputTensor = Dense(2)(outputTensor)
#create the model:
model = Model(inputTensor,outputTensor)
当心偏见.如果您希望这些层中的任何一个都没有偏差,请使用 use_bias=False
.
Beware of the biases. If you want any of those layers to have no bias, use use_bias=False
.
旧答案:向后
抱歉,我第一次回答时看到你的图片倒退了.我把它放在这里只是因为它已经完成了......
Sorry, I saw your image backwards the first time I answered. I'm keeping this here just because it's done...
from keras.models import Model
from keras.layers import Dense, Input, Concatenate
inputTensor = Input((2,))
#four groups of layers, all of them taking the same input tensor
group1 = Dense(1)(inputTensor)
group2 = Dense(1)(inputTensor)
group3 = Dense(1)(inputTensor)
group4 = Dense(1)(inputTensor)
#the next layer in each group takes the output of the previous layers
group1 = Dense(2)(group1)
group2 = Dense(2)(group2)
group3 = Dense(2)(group3)
group4 = Dense(2)(group4)
#now we join the results in a single tensor again:
outputTensor = Concatenate()([group1,group2,group3,group4])
#create the model:
model = Model(inputTensor,outputTensor)