Paylaşılan ağırlıklarla 2 büklüm operasyonla bir büklüm ağını eğitmek 1'lik bir norm tutmak gerektiğini

oy
0

Ben ağırlıkları paylaşan 2 filtreler ile 4 büklüm operasyonları ile bir büklüm ağını eğitmek istiyoruz ama filtrelerin elemanları arasında 1'e kalır bir norm ile. en ı yapmak istiyorum operasyondur girdi matrisi A ve B, ve filtre C ve D var diyelim:

M1 = tf.conv2d (A, C)

M2 = tf.conv2d (B, C)

M3 = tf.conv2d (A, D)

M4 = tf.conv2d (B, D)

Aynı zamanda, sqrt mi (^ 2 + D ^ C 2) = 1

Bir önceki soruda istendi gibi ben iki kez aynı katman kullanarak farklı evrişim operasyonu arasında ağırlıkları paylaşmak için bir yol bulduk keras katmanlar arasında konvolüsyon tanelerini nasıl paylaşılır? .

Ama nasıl 1'e normun kısıtlamaları formüle etmek hiçbir fikrim yok.

Teşekkür!

Ben (yeniden şekillendirmek sonra benim çekirdek filtresinin boyutuyla bir yoğun katmanı yoluyla eğitim göreceklerini bir giriş katmanı tanıtmak ve çalıştı ve Konvolusyon operasyondan önce 2 kullanarak cos (x) sin (x) içine bölünmüş Zaten değilim kodda bunu) giriş görüntüsünü modüle etmek. Daha sonra bir el ile tf.nn.conv2d () işlemi kullanılır. Ama çekirdekleri ile ben 0 boyut olarak toplu bir boyut olsun ve bu çekirdek [filter_height, filter_width, in_channels, out_channels] gerekli boyut ile uyumsuz. işe yaramaz Sıkma.

conv2d_layer_real= Conv2D(1,data_Mat2.shape[1],padding='same',kernel_constraint=max_norm(1),use_bias =False)
conv2d_layer_imag = Conv2D(1,data_Mat2.shape[1],padding='same',kernel_constraint=max_norm(1),use_bias =False)

input_shape = (data_Mat2.shape[1], data_Mat2.shape[1],1);
input_shape2 = (1,);

inputs_r = Input(shape=input_shape)
inputs_r2 = Input(shape=input_shape2)

phase_r2 = Dense(data_Mat2.shape[1]*data_Mat2.shape[1],activation = 'tanh',use_bias =False,kernel_initializer=RandomNormal(mean=0.0, stddev=0.5, seed=None))(inputs_r2)

phase_real = Lambda(lambda x:tf.cos(x*3.1416))(phase_r2)
phase_imag = Lambda(lambda x:tf.sin(x*3.1416))(phase_r2)

phase_real2 = Reshape((data_Mat2.shape[1], data_Mat2.shape[1],1))(phase_real)
phase_imag2 = Reshape((data_Mat2.shape[1], data_Mat2.shape[1],1))(phase_imag)

Mat_real = Multiply()([inputs_r,phase_real2])
Mat_imag = Multiply()([inputs_r,phase_imag2])

out_conv1 = conv2d_layer_real(Mat_real)
out_conv2 = conv2d_layer_real(Mat_imag)

out_conv3 = conv2d_layer_imag(Mat_real)
out_conv4 = conv2d_layer_imag(Mat_imag)

out_real = Add()([out_conv1,-out_conv4])
out_imag = Add()([out_conv2,out_conv3])

image_out = tf.complex(out_real,out_imag)
image_out = tf.square(tf.abs(image_out))

image_out = AveragePooling2D(pool_size=(pool_s, pool_s))(image_out)

vector_out = Reshape((9,))(image_out)

outputs = Softmax()(vector_out)

Bu son kod iyi çalışıyor ancak böyle kısıtlamalar yapılır çünkü conv2D katmanlarının Ağırlıkları için 1 norm olmaz

Oluştur 24/10/2019 saat 12:52
kaynak kullanıcı
Diğer dillerde...                            

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more