python - 如何使用 keras 功能 API 进行预测?
问题描述
我正在尝试使用带有 lstm 和 conv1 的功能 API 来训练模型,并且我正在成型,请帮助我解决问题。
keras.backend.clear_session()
input1_model3 = Input(shape=(pad_essay.shape[1],),name="essay_input_model3")
embedding_layer_text = Embedding(vocab_size_text,300, weights=[embedding_matrix],input_length=max_length_text,trainable=False)(input1_model3)
lstm1 = LSTM(300,activation='relu',return_sequences=True,kernel_constraint=keras.initializers.he_normal(seed=0))(embedding_layer_text)
flatten1 = Flatten()(lstm1)
input2 = Input(shape=(concatenated_data_train.shape[1], 1),name = "concatenated_data")
dense1 = Dense(64,activation='relu',kernel_initializer=keras.initializers.he_normal(seed=0))(input2)
conv_1d_1 = Conv1D(filters=16,kernel_size = 3,padding='same',activation='relu',kernel_initializer=keras.initializers.he_normal(seed=0))(dense1)
conv_1d_n = Conv1D(filters = 14,kernel_size = 3,padding='same',activation='relu',kernel_initializer=keras.initializers.he_normal(seed=0))(conv_1d_1)
flatten2 = Flatten()(conv_1d_n)
concatenated_layer = concatenate(inputs=[flatten1,flatten2],name='concatenated')
dense_layer1_after_concat = Dense(128,activation='relu', kernel_initializer=keras.initializers.he_normal(seed=0))(concatenated_layer)
drop_out1_after_concat = Dropout(0.3)(dense_layer1_after_concat)
dense_layer2_after_concat = Dense(128,activation='relu', kernel_initializer=keras.initializers.he_normal(seed=0))(drop_out1_after_concat)
drop_out2_after_concat = Dropout(0.3)(dense_layer2_after_concat)
dense_layer3_after_concat = Dense(128,activation='relu', kernel_initializer=keras.initializers.he_normal(seed=0))(drop_out2_after_concat)
output_layer = Dense(units= 1,activation='sigmoid',kernel_initializer=keras.initializers.glorot_uniform(seed=0),name="output")(dense_layer3_after_concat)
third_model = Model(inputs = [input1_model3,input2],outputs=output_layer)
下面的代码来获得 AUC 分数。从 sklearn.metrics 导入 tensorflow 作为 tf 导入 roc_auc_score
def auroc(y_true, y_pred):
return tf.py_function(roc_auc_score, (y_true, y_pred), tf.double)
# Build Model...
third_model.compile(loss='binary_crossentropy', optimizer='adam',metrics=['accuracy', auroc])
Concatenation few columns for my second input
concatenated_data_train1 = concatenated_data_train.reshape(concatenated_data_train.shape[0],concatenated_data_train.shape[1],1)
concatenated_data_test1 = concatenated_data_test.reshape(concatenated_data_test.shape[0],concatenated_data_test.shape[1],1)
正如你在上面看到的,我得到了 3-dim 输入,但从 conv1d 层得到了 2-dim,因此将它们转换为 3 维
third_model.fit([pad_essay,concatenated_data_train1],y_train,validation_data=([pad_essay_test,concatenated_data_test1],y_test),epochs=10,batch_size=64)
我收到以下错误
TypeError: len is not well defined for symbolic Tensors. (sub_16:0) Please call `x.shape` rather than `len(x)` for shape information.
请帮助我如何解决这个问题,谢谢。
解决方案
推荐阅读
- android - Android如何将触摸事件坐标发送到另一个不同尺寸和密度的屏幕并保留它?
- shell - Shellscript 打开 csvfile 并打印第 4 列,如果该字段为 null,则打印 null
- asp.net - 如何将数据存储在内存中并由其他按钮单击事件使用来显示数据?
- amazon-web-services - AWS 目的地不工作,我不知道为什么
- jython - 带有 jython 脚本的 wsadmin 给出错误 AttributeError: 'javapackage' object has no attribute 'SEC_SEGMENT'
- python - Python 3 - 'While loop' 验证用户输入是否在 2 个数字之间
- jquery - 使用键盘进行选择时的事件
- python - 如何为 jupyter notebook 手动安装 chromium?
- angular - PrimeNG 主题字体覆盖 Angular 应用程序字体
- javascript - 如何将 API 响应变量从服务传递到多个控制器