我有一个简单的问题要解决,其中有32个与图像(1x2048)大小相同的滤镜。因此,滤波器的权重将与像素一乘一,而不是对像素进行卷积。
每个图像的输出是一个单矢量,例如[1,0,0,0]。当我对两个图像求和并进行预测时,输出将为[1,0,0,0]或[0,0,1,0]。
但是,由于我已将两个图像相加,因此我希望获得[1,0,1,0]作为输出,以了解图像中同时具有这两个类。但是,我不知道该怎么做才能达到我的期望以及问题可能出在哪里。
input_shape=(1,2048,1)
model = Sequential()
model.add(Conv2D(32, kernel_size=(1, 2048), strides=(1, 1),
activation='softmax',
input_shape=input_shape,
kernel_regularizer=keras.regularizers.l1(L1regularization),
kernel_constraint=keras.constraints.non_neg() ))
model.compile(loss=keras.losses.categorical_crossentropy,
optimizer=optimizer,metrics=[metrics])
谢谢。
答案 0 :(得分:0)
这是由于softmax的属性-softmax
函数可最大化高值。然后,在大多数情况下,softmax函数只有一个最大值。 Softmax:
如果softmax的输入包含两个相等的higest值,则可以为softmax获得两个最大值。在非常罕见的情况下,通过卷积滤波器产生相同的值(对数)是可能的。否则,只有一个最大值,然后预测一个类。
来自github的示例:
在最后一张图像的情况下,softmax产生两个相似的值。但是你不应该一直都这么期待。
如果要检查此假设,请通过Conv2D
激活来检查linear
层的输出。
model = Sequential()
model.add(Conv2D(32, kernel_size=(1, 2048), strides=(1, 1),
activation='linear',
input_shape=input_shape,
kernel_regularizer=keras.regularizers.l1(L1regularization),
kernel_constraint=keras.constraints.non_neg()))
model.add(Activation('softmax'))
是相同的体系结构,但是您get output是Conv2D
的成员。