gpt4 book ai didi

python - model.fit() Keras 分类多输入-单输出给出错误 : AttributeError: 'NoneType' object has no attribute 'fit'

转载 作者:行者123 更新时间:2023-12-01 06:40:14 26 4
gpt4 key购买 nike

我正在构建一个具有多个输入(实际上是 3 个)的 Keras 分类模型来预测一个输出。具体来说,我的 3 个输入是:

  1. Actor
  2. 剧情简介
  3. 相关电影特色

输出:

  1. 类型标签

以上所有输入和单个输出均与 10,000 部 IMDB 电影相关。

即使模型的创建成功,当我尝试将模型适合我的三个不同的 X_train 时,我收到属性错误。我有一个用于 Actor 的 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))

模型的结构

enter image description here

产生错误

enter image description here

注意:请注意 X_train 和 X_test 都是数字序列。 (已标记化的文本)

经过一些研究,问题开始于 model.compile() 函数。虽然,我不确定应该在我的模型的编译函数中更改什么来解决这个问题。

预先感谢您就此事提供的任何建议或帮助。请随时在评论中询问我可能错过的任何其他信息,以使这个问题更加完整。

最佳答案

您的函数kera_multy_classification_model()不会返回任何内容,因此在model = kera_multy_classification_model()之后,您会得到model == None为你的函数什么也不返回。 None 的类型是 NoneType 并且它确实没有名为 fit() 的方法。

只需在kera_multy_classification_model()末尾添加返回模型即可。

关于python - model.fit() Keras 分类多输入-单输出给出错误 : AttributeError: 'NoneType' object has no attribute 'fit' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59489625/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com