我有一个8通道的图像。我有一个传统的算法,其中权重被添加到这些通道中的每一个,以获得输出为' 0' 0或者' 1'。这适用于几个样本和复杂场景。我想在使用CNN方法的机器学习中实现相同的功能。
我是ML的新手,并开始寻找那些似乎专门处理图像处理问题的教程 - 手写识别,特征提取等。
https://leonardoaraujosantos.gitbooks.io/artificial-inteligence/content/neural_networks.html
我设置了以Theano为背景的Keras.Basic Keras样本正常运行。
为了使用CNN获得相同的结果,我需要遵循哪些步骤?我不理解在我的用例中使用过滤器,内核,步幅。如果像素通道值和输出是以下形式,我们如何向Keras提供训练数据?
像素#1 f(C1,C2 ... C8)= 1
像素#2 f(C1,C2 ... C8)= 1
像素#3 f(C1,C2 ... C8)= 0。
像素#N f(C1,C2 ... C8)= 1
答案 0 :(得分:2)
我认为你应该像使用CNN进行语义分割一样对待它。有关示例,请参阅
https://people.eecs.berkeley.edu/~jonlong/long_shelhamer_fcn.pdf
您可以使用与他们使用相同的架构,但对于第一层而不是使用3个频道的过滤器,使用8个频道的过滤器。
对于损失函数,您可以使用相同的loos函数或更特定于二进制丢失的函数。
keras有几种实现,但有tensorflow 后端
https://github.com/JihongJu/keras-fcn https://github.com/aurora95/Keras-FCN
答案 1 :(得分:1)
由于输入是通道值的形式,顺序也是如此。我建议您使用 Convolution1D 。在这里,您将每个像素的通道值作为输入,您需要预测每个像素。试试这个 例如:
Conv1D(filters, kernel_size, strides=1, padding='valid')
Conv1D()
MaxPooling1D(pool_size)
......
(Add many layers as you want)
......
Dense(1)
使用binary_crossentropy
作为损失函数。