Версия Tensorflow: 1.10.1
Я хочу передать свои учёные веса и смещения слоев свертки в моей предварительно подготовленной сети в новую сеть.
Однако, поскольку я использовал conv2d
api, веса и смещения в файле контрольной точки автоматически называются Conv/weights
Conv_1/weights
, Conv/biases
, Conv_1/weights
Conv_1/biases
, Conv_1/biases
, Conv_2/weights
Conv_2/biases
, Conv_2/biases
и т.д.
Однако эти имена не соответствуют моему имени переменной в моих кодах. Например, Conv/weights
, Conv/biases
относятся к переменной с именем C2
в моих кодах, поэтому я хочу назвать их как C2/weights
, C2/biases
.
Я знаю, что для varibales, определяемых get_variable
, я могу установить их имена для любых строк, которые я хочу, с помощью my_varibale = tf.get_variable("whatever_name_I_want",shape,dtype,initializer)
, где my_variable
имеет имя "whatever_name_I_want"
my_variable
"whatever_name_I_want"
.
Однако, когда дело доходит до my_layer = tf.contrib.layers.conv2d(params_blabla)
(или эквивалентного api в tf.nn
или tf.layers
), я не знаю, как я могу назвать my_layer
.
Итак, можно ли это сделать? И если возможно, как?
Для tf.layers.conv2d и tf.nn.conv2d вы можете передать дополнительный параметр с именем name
.
Пример:
my_conv1 = tf.layers.conv2D(...., name='my_conv1')
my_conv2 = tf.layers.conv2D(...., name='my_conv2 ')
Для tf.contrib.layers.conv2d параметра scope
используется для пространств имен ваших слоев.
Пример:
with tf.name_scope('my_conv1') as scope:
my_conv1 = tf.contrib.layers.conv2d(..., scope=scope)
Результат:
Во всех случаях ваши веса и предубеждения называются, например, my_conv1/weights
my_conv1/bias
и my_conv1/bias
.
name
вtf.contrib.layers
и думал, чтоtf.nn
иtf.layers
должны быть похожими. Оказалось, что я должен был внимательно прочитать документацию, прежде чем задавать этот вопрос.