问题描述
我正在尝试创建一个看起来像这样的设计:
现在,我正在尝试使用以下代码,但我需要的是第二层隐藏层的输出,该输出位于下一层的第15个位置。就我而言,它是使用此代码添加到第31位的。
inputs = Input(shape=(30,),name='first_input')
hn = Dense(4,activation='relu')(inputs)
output = Dense(1,activation='linear')(hn)
first_model = Model(inputs=inputs,outputs=output)
second_input = Input(shape=(30,name='second_input')
from_first_model = first_model.output
merge_layer = concatenate([second_input,from_first_model ])
hn = Dense(4,activation="relu")(merge_layer)
dnn_op_layer = Dense(1,activation='linear')(hn)
model_b = Model(inputs=[second_input,first_model.input],outputs=dnn_op_layer)
解决方法
这应该工作-将张量切成两部分,然后将两部分与第二个隐藏层的输出连接起来。
test = tf.convert_to_tensor(np.random.rand(30),dtype=tf.float32)
test2 = tf.convert_to_tensor([100],dtype=tf.float32)
# create layer 3 as desired
temp,temp2 = test[:15],test[15:]
layer3 = tf.concat([temp,test2,temp2],axis=0)
edit-您遇到的错误可能是使用功能性api引起的。另外,前面的示例假定输入的形状为(30,),而实际上输入的形状应为(1,30),以与张量流一致。
class model(tf.keras.Model):
def __init__(self):
super().__init__()
self.hidden1 = tf.keras.layers.Dense(4,activation='relu')
self.hidden2 = tf.keras.layers.Dense(1)
self.hidden4 = tf.keras.layers.Dense(4,activation='relu')
self.hidden5 = tf.keras.layers.Dense(1)
def call(self,inputs):
x = self.hidden1(inputs)
x = self.hidden2(x)
temp,temp2 = inputs[:,:15],inputs[:,15:]
layer3 = tf.concat([temp,x,axis=1)
x = self.hidden4(layer3)
x = self.hidden5(x)
return x
# test
mymodel = model()
inputs = tf.convert_to_tensor(np.random.rand(1,30),dtype=tf.float32)
mymodel(inputs)