问题描述
我有一个暹罗神经网络,我想对提取的图像进行线性变换 使用PCA或自动编码器减少尺寸的功能。 扁平化后如何实现?
这是我的代码:
input_a = Input(shape=(input_shape))
input_b = Input(shape=(input_shape))
# Convolutional Neural NetworK
seq = Sequential()
seq.add(Conv2D(32,(5,5),activation='relu',padding='same',input_shape=input_shape,kernel_initializer=initializers.RandomNormal(mean=0.0,stddev=0.1,seed=None),bias_initializer= initializers.Zeros()))
seq.add(MaxPooling2D(pool_size=(2,2),strides=(2,2)))
seq.add(Conv2D(64,2)))
seq.add(Flatten())
processed_a = seq(input_a)
processed_b = seq(input_b)
#here i want to preform linear transformation
L2_distance = Lambda(euclidean_distance,output_shape=eucl_dist_output_shape,name='L2')([processed_a,processed_b])
a = Lambda(function,name='out1')(L2_distance)
model = Model([input_a,input_b],a)
解决方法
要在连体神经网络的末端添加一个线性变换层,或者更好的说它的编码器,您可以执行以下两个步骤:
- 您需要构建一个自定义层。您可以使用以下一项并删除偏差项:https://keras.io/guides/making_new_layers_and_models_via_subclassing/#the-layer-class-the-combination-of-state-weights-and-some-computation
- 您需要在 seq.add(Flatten()) 之后添加该层