我正在尝试在keras中创建我的第一个合奏模型。我的数据集中有3个输入值和一个输出值。
from keras.optimizers import SGD,Adam
from keras.layers import Dense,Merge
from keras.models import Sequential
model1 = Sequential()
model1.add(Dense(3, input_dim=3, activation='relu'))
model1.add(Dense(2, activation='relu'))
model1.add(Dense(2, activation='tanh'))
model1.compile(loss='mse', optimizer='Adam', metrics=['accuracy'])
model2 = Sequential()
model2.add(Dense(3, input_dim=3, activation='linear'))
model2.add(Dense(4, activation='tanh'))
model2.add(Dense(3, activation='tanh'))
model2.compile(loss='mse', optimizer='SGD', metrics=['accuracy'])
model3 = Sequential()
model3.add(Merge([model1, model2], mode = 'concat'))
model3.add(Dense(1, activation='sigmoid'))
model3.compile(loss='binary_crossentropy', optimizer='Adam', metrics=['accuracy'])
model3.input_shape
Run Code Online (Sandbox Code Playgroud)
整体模型(model3)编译时没有任何错误,但是在拟合模型时,我必须两次传递相同的输入model3.fit([X,X],y)。我认为这是不必要的步骤,我不想为输入模型传递两次输入,而是希望有一个公共输入节点。我该怎么做?
我一直在尝试使用Keras构建多输入模型。我来自使用顺序模型,并且只有一个非常简单的输入。我一直在查看文档(https://keras.io/getting-started/functional-api-guide/)和有关StackOverflow的一些答案(如何在Keras 2.0中“合并”顺序模型?)。基本上我想要的是让两个输入训练一个模型。一个输入是一段文本,另一个是从该文本中提取的一组精选特征。手工选择的特征向量具有恒定的长度。以下是我到目前为止尝试过的方法:
left = Input(shape=(7801,), dtype='float32', name='left_input')
left = Embedding(7801, self.embedding_vector_length, weights=[self.embeddings],
input_length=self.max_document_length, trainable=False)(left)
right = Input(shape=(len(self.z_train), len(self.z_train[0])), dtype='float32', name='right_input')
for i, filter_len in enumerate(filter_sizes):
left = Conv1D(filters=128, kernel_size=filter_len, padding='same', activation=c_activation)(left)
left = MaxPooling1D(pool_size=2)(left)
left = CuDNNLSTM(100, unit_forget_bias=1)(left)
right = CuDNNLSTM(100, unit_forget_bias=1)(right)
left_out = Dense(3, activation=activation, kernel_regularizer=l2(l_2), activity_regularizer=l1(l_1))(left)
right_out = Dense(3, activation=activation, kernel_regularizer=l2(l_2), activity_regularizer=l1(l_1))(right)
for i in range(self.num_outputs):
left_out = Dense(3, activation=activation, kernel_regularizer=l2(l_2), activity_regularizer=l1(l_1))(left_out)
right_out = Dense(3, activation=activation, kernel_regularizer=l2(l_2), activity_regularizer=l1(l_1))(right_out)
left_model = Model(left, left_out)
right_model = …Run Code Online (Sandbox Code Playgroud)