Я обучил модель с предварительно обученными встраиваниями слов, например:
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
слой или что-то в этом роде?
Любая помощь будет принята с благодарностью!
model.save()
не сохраняет лучшую итерацию модели, а просто сохраняет последнюю итерацию, которая не всегда может быть лучшей итерацией. Так что сохраните лучшие веса и используйтеmodel.to_json()
, чтобы сохранить архитектуру модели. Дополнительные сведения здесь и здесь - person Aditya   schedule 02.08.2018