Установите тензоры веса и смещения операции TensorFlow conv2d


Мне дали обученную нейронную сеть в torch, и мне нужно перестроить ее точно в tensorflow. Я считаю, что правильно определил архитектуру сети в tensorflow, но у меня возникли проблемы с переносом тензоров веса и смещения. Используя сторонний пакет, я преобразовал все тензоры веса и смещения из сети torch в массивы numpy, а затем записал их на диск. Я могу загрузить их обратно в свою программу python, но я не могу придумать способ назначить их соответствующим слои в моей сети тензорного потока.

Например, у меня есть слой свертки, определенный в tensorflow как

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)

Согласно документации tensorflow, tf.nn.операция conv2d использует форму, определенную в переменной kernel_1, для построения тензора веса. Однако я не могу понять, как получить доступ к этому тензору веса, чтобы установить его в массив веса, который я загрузил из файла.

Можно ли явно задать тензор веса? И если да, то как?

(тот же вопрос относится и к тензору смещения.)

1   8   2016-03-25 18:45:42

1 ответ:

Если у вас есть веса и смещения в массиве NumPy, их должно быть легко подключить к вашей сети TensorFlow:

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 и biases_1_array находятся в правильном формате данных. Смотрите документацию для tf.nn.conv2d() для объяснения требуемой формы фильтра.