我有一个想要输入到卷积神经网络模型的图像数据集,但是,对于这些图像中的每一个,与图像相关联的对象都有一个范围或距离。
我想输入此范围作为CNN模型的附加上下文。
提供这些额外信息是否可以带来任何好处?这样做有意义吗?在Keras可行吗?
谢谢!
答案 0 :(得分:7)
这里有几个选项,一个是将数值编码为输入中的特征平面。如果您的数值为c
,则可以为每个输入图像添加一个通道,每个像素的值为c
。
另一种选择是将值作为附加输入合并到完全连接的层中。
在keras中,这看起来像是:
conv = Sequential()
conv.add(Conv2D(32, kernel_size=(3, 3), strides=(1, 1),
activation='relu',
input_shape=input_shape))
conv.add(MaxPooling2D(pool_size=(2, 2)))
conv.add(Flatten())
conv.add(Dense(512, activation='relu'))
range = Sequential()
range.add(Dense(1, input_shape=(1,), activation='relu'))
merged = Concatenate([conv, range])
merged.add(Dense(n_classes, activation='softmax'))
merged.compile(optimizer='adam', loss='binary_crossentropy',
metrics=['accuracy'])
您选择哪个选项取决于您的数据以及您是否认为数字功能有助于卷积层更好地理解输入,或者您是否认为直到稍后才需要它。如果你有时间,你可以尝试两种架构,看看哪种架构更好。