我正在尝试训练CNN进行对象分类 . 因此,除了图像之外,我还想输入一些文本功能 .
我在这里找到了一个这样做的例子http://cbonnett.github.io/Insight.html
作者构建了两个模型,一个用于图像识别的CNN和一个用于文本的普通ANN . 最后,他将它们合并在一起并应用softmax激活 . 因此,他的管道如下:
merged = Merge([cnn_model, text_model], mode='concat')
### final_model takes the combined models and adds a sofmax classifier to it
final_model = Sequential()
final_model.add(merged)
final_model.add(Dropout(do))
final_model.add(Dense(n_classes, activation='softmax'))
我想知道这是否是组合图像文本的首选方法,或者是否有其他方法可以使用Keras解决此类任务?换句话说,是否有可能(或甚至有意义)将文本作为输入直接包含在CNN中,以便CNN处理图像和文本?
2 回答
你是在正确的轨道,但是你也可以使用CNN来处理文本,它通常是使用RNN等的更快的替代方案 . 但是 you can't use the same CNN to process both text and images ,它们必须是不同的,因为文本是1D而图像是2D输入,更不用说它们来自来自单独的源代码分发 . 所以,如果你愿意,你仍然会得到2个子模型:
使用CNN模型处理图像 .
使用其他模型(RNN,ANN,CNN或仅一个热门编码字等)处理文本 . 通过CNN,我的意思是通常是一个CNN,在句子中的单词上运行 .
合并2个潜在空间,用于说明有关图像和文本的信息 .
运行最后几个密集层进行分类 .
让我这样解释一下 . 您首先进行卷积,聚合数据进入神经网络 . 不是使用一个卷积,而是有两个卷积,一个用于文本,一个用于图像 . 唯一的附加步骤是在 balancer 卷积结果后连接两条信息 . 我建议你在这个链接上查看我的代码 . 此代码是关于在 Headers 和描述上使用CNN并将它们连接在一起 . 与您的情况类似,您将文本数据作为我的“描述”,将图像数据作为我的“ Headers ” .
https://www.kaggle.com/jingqliu/fasttext-conv2d-with-tf-on-title-and-description
它是用张量流写的,但我相信你会得到这个想法!