少年帮|利用深度学习生成医疗报告(11)

该模型类似于我们之前看到的编解码器模型 , 但有注意组件和一些小的更新 。 如果你愿意 , 你可以尝试自己的改变 , 它们可能会产生更好的结果 。
模型架构:
少年帮|利用深度学习生成医疗报告模型摘要:
少年帮|利用深度学习生成医疗报告9.1 训练训练步骤将与我们的编解码器模型完全相同 。 我们将使用相同的“convert”函数生成批处理 , 从而获得逐字输入输出序列 , 并使用train_on_batch对其进行训练 。
与编解码器模型相比 , 注意力模型需要更多的内存和计算能力 。 因此 , 你可能需要减小这个batch的大小 。 全过程请参考编解码器模型的训练部分 。
为了注意机制 , 使用了adam优化器 , 学习率为0.0001 。 这个模型被训练了20个epoch 。 由于随机性 , 你得到的结果可能会有所不同 。
少年帮|利用深度学习生成医疗报告所有代码都可以从我的GitHub访问 。 它的链接已经在这个博客的末尾提供了 。
9.2 推理与之前中一样 , 我们将从模型中分离编码器和解码器部分 。
# 编码器encoder_input = attention_model.input[0]encoder_output = attention_model.get_layer('dense_encoder').outputencoder_model = Model(encoder_input, encoder_output)# 有注意力机制的解码器text_input = attention_model.input[1]cnn_input = Input(shape=(49,256))lstm, h_s, c_s = attention_model.get_layer('LSTM2').outputatt = attention_layer([cnn_input, lstm])d_g = tf.keras.layers.GlobalAveragePooling1D()(cnn_input)a_g = tf.keras.layers.GlobalAveragePooling1D()(att)con = Concatenate()([d_g, a_g])fc_1 = FC1(con)out = OUTPUT_LAYER(fc_1)decoder_model = Model([cnn_input, text_input], out)这为我们节省了一些测试时间 。
9.3 贪婪搜索现在 , 我们已经构建了模型 , 让我们检查获得的BLEU分数是否确实比以前的模型有所改进:
少年帮|利用深度学习生成医疗报告我们可以看出它比贪婪搜索的编解码模型有更好的性能 。 因此 , 它绝对是比前一个改进 。
9.4 束搜索现在让我们看看束搜索的一些分数:
少年帮|利用深度学习生成医疗报告BLEU得分低于贪婪算法 , 但差距并不大 。 但值得注意的是 , 随着束宽度的增加 , 分数实际上在增加 。 因此 , 可能存在束宽度的某个值 , 其中分数与贪婪算法的分数交叉 。
9.5 示例以下是模型使用贪婪搜索生成的一些报告:
少年帮|利用深度学习生成医疗报告图像对1的原始报告:“心脏大小和肺血管在正常范围内 。 未发现局灶性浸润性气胸胸腔积液
图像对1的预测报告:“心脏大小和纵隔轮廓在正常范围内 。 肺是干净的 。 没有气胸胸腔积液 。 没有急性骨性发现 。 ”
这些预测与最初的报告几乎相似 。
少年帮|利用深度学习生成医疗报告图像对2的原始报告:“心脏大小和肺血管在正常范围内出现 。 肺为游离灶性空域病变 。 未见胸腔积液气胸


推荐阅读