连体网络的线性变换

问题描述

我有一个暹罗神经网络,我想对提取的图像进行线性变换 使用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)

解决方法

要在连体神经网络的末端添加一个线性变换层,或者更好的说它的编码器,您可以执行以下两个步骤:

  1. 您需要构建一个自定义层。您可以使用以下一项并删除偏差项:https://keras.io/guides/making_new_layers_and_models_via_subclassing/#the-layer-class-the-combination-of-state-weights-and-some-computation
  2. 您需要在 seq.add(Flatten())
  3. 之后添加该层

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...