python - Keras 模型输入顺序
问题描述
我有 3 个独立的模型,它们基本上都在用户项的结构中。我想合并这些,然后在合并后运行几层。但是,当需要输入时,我首先遇到了错误。我假设我需要 的结构中[item1, user, item2, users, item3 users]
的输入,它与我的 3 个初始独立模型的输入相匹配。但是,这样做时,它基本上说,“你不能重复输入”。然而,我觉得这个[item1, item2, item3, user]
结构有些问题,即使它运行得很好。我是否应该简单地复制用户以创建相同的 user1、user2、user3?
下面的代码:
#Making the vctors for the primary categories
item1_input = Input(shape=[1])
item2_input = Input(shape=[1])
item3_input = Input(shape=[1])
user_input = Input(shape=[1])
item1_vec = Flatten()(Embedding(nb_item1s + 1, 32)(item1_input))
item1_vec = Dropout(0.5)(item1_vec)
item2_vec = Flatten()(Embedding(nb_breweries + 1, 32)(item2_input))
item2_vec = Dropout(0.5)(item2_vec)
item3_vec = Flatten()(Embedding(nb_item3s + 1, 32)(item3_input))
item3_vec = Dropout(0.5)(item3_vec)
user_vec = Flatten()(Embedding(nb_users + 1, 32)(user_input))
user_vec = Dropout(0.5)(user_vec)
# Next, we join them all together and put them
# through a pretty standard deep learning architecture
item1_input_vecs = add([item1_vec, user_vec])
item1_nn = Dropout(0.5)(Dense(128, activation='relu')(item1_input_vecs))
item1_nn = BatchNormalization()(item1_nn)
item1_nn = Dropout(0.5)(Dense(128, activation='relu')(item1_nn))
#item1_nn = BatchNormalization()(item1_nn)
#item1_nn = Dense(128, activation='relu')(item1_nn)
item1_result = Dense(9, activation='softmax')(item1_nn)
item2_input_vecs = add([item2_vec, user_vec])
item2_nn = Dropout(0.5)(Dense(128, activation='relu')(item2_input_vecs))
item2_nn = BatchNormalization()(item2_nn)
item2_nn = Dropout(0.5)(Dense(128, activation='relu')(item2_nn))
#item2_nn = BatchNormalization()(item2_nn)
#item2_nn = Dense(128, activation='relu')(item2_nn)
item2_result = Dense(9, activation='softmax')(item2_nn)
item3_input_vecs = add([item3_vec, user_vec])
item3_nn = Dropout(0.5)(Dense(128, activation='relu')(item3_input_vecs))
item3_nn = BatchNormalization()(item3_nn)
item3_nn = Dropout(0.5)(Dense(128, activation='relu')(item3_nn))
#item3_nn = BatchNormalization()(item3_nn)
#item3_nn = Dense(128, activation='relu')(item3_nn)
item3_result = Dense(9, activation='softmax')(item3_nn)
result_vecs = Concatenate()([item1_result, item2_result, item3_result])
result_vecs = Dropout(0.5)(result_vecs)
final_nn = Dense(128,activation='relu')(result_vecs)
final_nn = Dropout(0.5)(final_nn)
final_result = Dense(9, activation='softmax')(final_nn)
finalmodel = Model(inputs=[item1_input, item2_input, item3_input, user_input], outputs=final_result)
finalmodel.compile(optimizer='adam', loss = 'categorical_crossentropy')
finalhistory = finalmodel.fit([a_item1id, a_item2id, a_item3id, a_userid], a_y,
epochs=20,
validation_data=([b_item1id, b_item2id, b_item3id, b_userid], b_y), verbose=1)
解决方案
您的代码是正确的。您的模型有一个输入 ( user_input
),然后在模型内部,您Input()
在三个不同的层中使用它。
推荐阅读
- php - 如果为空,Laravel 增量表
- python - 如何在不循环的情况下对多列(包括结果列)调用应用
- mysql - 如何使用条件来选择 where 子句
- reactjs - 如何通过前端使用 Twilio 发送短信并做出反应?
- npm - 在 webpack 中使用 font-awesome
- .net - MVVM + WPF - 为具有多个视图的 ViewModel 设计
- c# - 将 OpenXML 创建的 Excel 电子表格导出到客户端
- azure - Dialogflow Webhook Response c#在调用时出错
- cmake - 结合 add_compile_options 和 target_compile_options
- java - 在 Nexus/Artifactory UI 中搜索远程(代理)存储库