2016-03-25 10 views
5

Meşale ile eğitilmiş bir sinir ağı verdim ve tam olarak tensorflow içinde yeniden inşa etmem gerekiyor. Ağın mimarisini tensorflow'da doğru bir şekilde tanımladığımı düşünüyorum ama ağırlık ve önyargı tensörlerini transfer etmekte zorlanıyorum. Üçüncü bir parti paketi kullanarak, tüm ağırlık ve ön gerilim tensörlerini meşale ağından numpy dizilerine dönüştürdüm ve sonra diske yazdım. Onları python programıma geri yükleyebilirim ancak tensorflow ağımdaki ilgili katmanlara atamak için bir yol bulamıyorum.Tensorflow conv2d çalışmasının ağırlık ve öngerilimli tensörleri ayarlayın

Örneğin, tensorflow belgelerine göre

kernel_1 = tf.Variable(tf.truncated_normal([11,11,3,64], stddev=0.1)) 
conv_kernel_1 = tf.nn.conv2d(input, kernel_1, [1,4,4,1], padding='SAME') 
biases_1 = tf.Variable(tf.zeros[64]) 
bias_layer_1 = tf.nn_add(conv_kernel_1, biases_1) 

olarak tensorflow tanımlanan bir büklüm katmanı, tf.nn.conv2d işletme ağırlığı tensörünün oluşturmak için kernel_1 değişkeninde tanımlanan şekli kullanmaktadır. Ancak, dosyadan yüklediğim ağırlık dizisine ayarlamak için bu ağırlık tensörüne nasıl erişeceğimi anlayamıyorum.

Ağırlık tensörünü açıkça ayarlamak mümkün mü? Ve eğer öyleyse, nasıl?

(aynı soru önyargı tensörü için geçerlidir.)

cevap

5

Bir NumPy dizide ağırlıkları ve önyargıları varsa, sizin TensorFlow ağına bağlamak için kolay olmalıdır:

weights_1_array = ... # ndarray of weights for layer 1 
biases_1_array = ... # ndarray of biases for layer 1 

conv_kernel_1 = tf.nn.conv2d(input, weights_1_array, [1, 4, 4, 1], padding='SAME') 
bias_layer_1 = tf.nn.bias_add(conv_kernel_1, biases_1_array) 

weights_1_array ve biases_1_array'un doğru veri biçiminde olduğundan emin olmanız gerektiğini unutmayın. Gerekli filtre şeklinin açıklaması için tf.nn.conv2d() belgelerine bakın.

+0

Bu yaklaşımı denedim ve bana bir hata veriyor. ValueError: Shape (64, 363) 4 numaralı olmalıdır. Benim anlayışım, filtre parametresinin ağırlık tensörünün nasıl oluşturulduğunu tanımlamasıdır – bdawson1

+0

Ya da yüklenmeyi yeniden biçimlendirmem gerekiyor mu? ağırlık tensörü? Yürütme sırasında değerleri korur mu? – bdawson1

+0

Evet, ağırlık tensörünü yeniden şekillendirmeniz gerekebilir. 'Tf.nn.conv2d() 'op, bunun 4 boyutlu olmasını gerektirir; [filter_height, filter_width, in_channels, out_channels]'. – mrry