我训练了一个带有预先训练过的单词嵌入的模型,如下所示:
embedding_matrix = np.zeros((vocab_size, 100))
for word, i in text_tokenizer.word_index.items():
embedding_vector = embeddings_index.get(word)
if embedding_vector is not None:
embedding_matrix[i] = embedding_vector
embedding_layer = Embedding(vocab_size,
100,
embeddings_initializer=Constant(embedding_matrix),
input_length=50,
trainable=False)
该架构看起来像这样:
sequence_input = Input(shape=(50,), dtype='int32')
embedded_sequences = embedding_layer(sequence_input)
text_cnn = Conv1D(filters=5, kernel_size=5, padding='same', activation='relu')(embedded_sequences)
text_lstm = LSTM(500, return_sequences=True)(embedded_sequences)
char_in = Input(shape=(50, 18, ))
char_cnn = Conv1D(filters=5, kernel_size=5, padding='same', activation='relu')(char_in)
char_cnn = GaussianNoise(0.40)(char_cnn)
char_lstm = LSTM(500, return_sequences=True)(char_in)
merged = concatenate([char_lstm, text_lstm])
merged_d1 = Dense(800, activation='relu')(merged)
merged_d1 = Dropout(0.5)(merged_d1)
text_class = Dense(len(y_unique), activation='softmax')(merged_d1)
model = Model([sequence_input,char_in], text_class)
当我将模型转换为json时,我收到此错误:
ValueError: can only convert an array of size 1 to a Python scalar
同样,如果我使用 model.save()
函数,它似乎保存正确,但当我去加载它时,我得到 Type Error: Expected Float32
.
我的问题是:在尝试序列化这个模型时,我有什么遗漏的吗?我需要某种 Lambda
层或其他类型的东西吗?
任何帮助将不胜感激!
2 回答
您可以使用
Embedding
图层中的weights
参数来提供初始权重 .模型保存/加载后,重量应保持不可训练:
我希望你在编译后保存模型 . 喜欢:
要保存模型,您可以执行以下操作:
要加载模型,