我正在构建具有多个输入(实际上是3个)的Keras分类模型,以预测单个输出。具体来说,我的3个输入是:
输出:
以上所有输入和单个输出都与10,000个IMDB电影有关。
即使模型创建成功,当我尝试在三个不同的X_train上拟合模型时,也会出现Attribute错误。对于演员,我有一个X_train和X_test,对于情节摘要,我有一个不同的X_train和X_test;对于电影功能,我有一个不同的X_train和X_test。所有输入的y_train和y_test都相同。
Python代码(创建多个输入keras)
def kera_multy_classification_model():
sentenceLength_actors = 15
vocab_size_frequent_words_actors = 20001
sentenceLength_plot = 23
vocab_size_frequent_words_plot = 17501
sentenceLength_features = 69
vocab_size_frequent_words_features = 20001
model = keras.Sequential(name='Multy-Input Keras Classification model')
actors = keras.Input(shape=(sentenceLength_actors,), name='actors_input')
plot = keras.Input(shape=(sentenceLength_plot,), name='plot_input')
features = keras.Input(shape=(sentenceLength_features,), name='features_input')
emb1 = layers.Embedding(input_dim = vocab_size_frequent_words_actors + 1,
# based on keras documentation input_dim: int > 0. Size of the vocabulary, i.e. maximum integer index + 1.
output_dim = Keras_Configurations_model1.EMB_DIMENSIONS,
# int >= 0. Dimension of the dense embedding
embeddings_initializer = 'uniform',
# Initializer for the embeddings matrix.
mask_zero = False,
input_length = sentenceLength_actors,
name="actors_embedding_layer")(actors)
encoded_layer1 = layers.LSTM(100)(emb1)
emb2 = layers.Embedding(input_dim = vocab_size_frequent_words_plot + 1,
output_dim = Keras_Configurations_model2.EMB_DIMENSIONS,
embeddings_initializer = 'uniform',
mask_zero = False,
input_length = sentenceLength_plot,
name="plot_embedding_layer")(plot)
encoded_layer2 = layers.LSTM(100)(emb2)
emb3 = layers.Embedding(input_dim = vocab_size_frequent_words_features + 1,
output_dim = Keras_Configurations_model3.EMB_DIMENSIONS,
embeddings_initializer = 'uniform',
mask_zero = False,
input_length = sentenceLength_features,
name="features_embedding_layer")(features)
encoded_layer3 = layers.LSTM(100)(emb3)
merged = layers.concatenate([encoded_layer1, encoded_layer2, encoded_layer3])
layer_1 = layers.Dense(Keras_Configurations_model1.BATCH_SIZE, activation='relu')(merged)
output_layer = layers.Dense(Keras_Configurations_model1.TARGET_LABELS, activation='softmax')(layer_1)
model = keras.Model(inputs=[actors, plot, features], outputs=output_layer)
print(model.output_shape)
print(model.summary())
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['sparse_categorical_accuracy'])
Python代码(适合我的输入的多个输入keras)
def fit_keras_multy_input(model, x_train_seq_actors, x_train_seq_plot, x_train_seq_features, x_test_seq_actors, x_test_seq_plot, x_test_seq_features, y_train, y_test):
s = time()
fit_model = model.fit([x_train_seq_actors, x_train_seq_plot, x_train_seq_features], y_train,
epochs=Keras_Configurations_model1.NB_EPOCHS,
verbose = Keras_Configurations_model1.VERBOSE,
batch_size=Keras_Configurations_model1.BATCH_SIZE,
validation_data=([x_test_seq_actors, x_test_seq_plot, x_test_seq_features], y_test),
callbacks=callbacks)
duration = time() - s
print("\nTraining time finished. Duration {} secs".format(duration))
模型的结构
产生错误
注意:请不要X_train和X_test都是数字序列。 (已标记化的文本)
进行了一些研究后,问题开始于model.compile()函数。虽然,我不确定应该在模型的编译功能中进行哪些更改以解决此问题。
在此问题上,谢谢您的任何建议或帮助。请随时在评论中询问我可能错过的任何其他信息,以使此问题更完整。
答案 0 :(得分:1)
您的函数kera_multy_classification_model()
不返回任何内容,因此在model = kera_multy_classification_model()
之后,您将得到model == None
,因为函数不返回任何内容。 None
的类型为NoneType
,它实际上没有名为fit()
的方法。
只需在kera_multy_classification_model()
的末尾添加返回模型。