我正在尝试训练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既可以处理图像也可以处理文本?
答案 0 :(得分:3)
您处在正确的轨道上,但是可以,您也可以使用CNN来处理文本,它通常是使用RNN等的更快的选择。但是您不能使用同一CNN来处理文本和图像,它们必须有所不同,因为文本是1D输入,图像是2D输入,更不用说它们源自单独的源代码分布。因此,如果您愿意,最终还是会得到2个子模型:
答案 1 :(得分:2)
让我这样解释。您首先要做卷积,然后聚合的数据进入神经网络。与使用一种卷积不同,您有两种卷积,一种用于文本,另一种用于图像。唯一的附加步骤是在平整卷积结果之后,将两条信息连接起来。我建议您在此链接上查看我的代码。这段代码是关于在标题和描述上使用CNN并将它们连接在一起的。与您的情况相似,您将文本数据作为我的“描述”,将图像数据作为我的“标题”。
https://www.kaggle.com/jingqliu/fasttext-conv2d-with-tf-on-title-and-description
它是用张量流编写的,但是我相信你会明白的!