尝试打开序列化的Keras模型时出现条件变量错误

时间:2018-08-09 02:17:57

标签: tensorflow keras nlp

我有以下模型:

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,
                            weights=[embedding_matrix],
                            input_length=50,
                            trainable=False)

sequence_input = Input(shape=(50,), dtype='int32')
embedded_sequences = embedding_layer(sequence_input)

text_cnn = Conv1D(filters=64, kernel_size=5, strides=1, padding='same', activation='relu')(embedded_sequences)
text_cnn = Conv1D(filters=32, kernel_size=5, strides=1, padding='same', activation='relu')(text_cnn)
text_cnn = Conv1D(filters=16, kernel_size=5, strides=1, padding='same', activation='relu')(text_cnn)


text_lstm = Bidirectional(LSTM(256, return_sequences=True))(text_cnn)
text_lstm = Dense(128, activation='relu')(text_lstm)
text_lstm = Dropout(0.3)(text_lstm)


char_in = Input(shape=(50, 18, ))
char_cnn = Conv1D(filters=64, kernel_size=5, strides=1, padding='same', activation='relu')(char_in)
char_cnn = Conv1D(filters=32, kernel_size=5, strides=1, padding='same', activation='relu')(char_cnn)
char_cnn = Conv1D(filters=16, kernel_size=5, strides=1, padding='same', activation='relu')(char_cnn)

char_lstm = Bidirectional(LSTM(256, return_sequences=True))(char_cnn)
char_lstm  = GaussianNoise(0.50)(char_lstm)
char_lstm = Dense(128, activation='relu')(char_lstm)
char_lstm = Dropout(0.3)(char_lstm)

merged = concatenate([char_lstm, text_lstm]) 

merged_d1 = Dense(512, activation='relu')(merged)
merged_d1 = Dropout(0.3)(merged_d1)
merged_d1 = Dense(256, activation='relu')(merged_d1)
merged_d1  = GaussianNoise(0.30)(merged_d1)

text_class = Dense(len(y_unique), activation='softmax')(merged_d1)
model = Model([sequence_input,char_in], text_class)

接受过像这样的GPU的培训:

parallel_model = multi_gpu_model(model, gpus=4)
parallel_model.compile(loss='binary_crossentropy',
                       optimizer='adam', metrics=['accuracy'])
parallel_model.fit([x_train, x_train_char], y_train, validation_data=([x_test, x_test_char], y_test), epochs=1 ,batch_size=512)

我用model.save()方法序列化了它。

当我尝试将其加载到不同内核的同一台计算机上时,出现以下错误:

ValueError: Initializer for variable conv1d_4_1/kernel/ is from inside a control-flow construct, such as a loop or conditional. When creating a variable inside a loop or conditional, use a lambda as the initializer.

我不确定它可以指的是什么循环或条件,也许与双向包装有关?我已经序列化了其他类似模型,没有任何问题。

任何帮助将不胜感激!

0 个答案:

没有答案