【发布时间】:2018-02-23 02:28:36
【问题描述】:
我正在使用 CNN 开发分类模型,现在我想在我的问题中应用分类算法 (Bilinear CNN Models for Fine-grained Visual Recognition Tsung-Yu Lin Aruni RoyChowdhury Subhransu Maji University of Massachusetts, Amherst)。
具体来说,现在我想对两个CNN模型的两个输出矩阵做外积,并且我已经完成了矩阵的转置,现在我只想在keras中将两个矩阵相乘,其大小为 (None, 512, 49) 和 (None, 49, 512)。
我尝试在keras中使用Merge层,但是出现了一些错误:
当我使用点模式时,
ValueError:使用点模式的维度不兼容:49!= 512。层 形状:(None, 512, 49), (None, 49, 512)
当我使用乘法模式时,
ValueError: 只能使用 mul 合并相同输出形状的层 模式。图层形状:[(None, 512, 49), (None, 49, 512)]
我不知道怎么解决,请帮帮我!这是我的问题的一些代码:
t_model = applications.VGG16(weights='imagenet', include_top=False,
input_shape=(224, 224, 3))
model_a = Sequential()
model_a.add(t_model)
def trans_1(conv):
conv = tf.reshape(conv, [-1, 49, 512])
return conv
model_a.add(Lambda(trans_1, output_shape=[49, 512]))
s_model = applications.VGG16(weights='imagenet', include_top=False,
input_shape=(224, 224, 3))
model_b = Sequential()
model_b.add(s_model)
def trans_2(conv):
conv = tf.reshape(conv, [-1, 49, 512])
conv = tf.transpose(conv, perm = [0, 2, 1])
return conv
model_b.add(Lambda(trans_2, output_shape=[512, 49]))
f_model = Sequential()
f_model.add(Merge([model_b, model_a], mode='dot'))
【问题讨论】:
标签: python machine-learning computer-vision deep-learning keras