То, что вы хотите сделать, частично достижимо.
Наличие переменной с точно таким же именем, как у уже определенного, вероятно, невозможно. Потому что TensorFlow создает граф потока данных, и каждый узел должен быть уникально идентифицирован (чтобы избежать неоднозначностей). Если вам нужно одно и то же имя, вы можете сделать это, используя переменную область видимости с разными областями действия.
Но для присвоения части переменной другой, вы можете использовать следующий код:
import tensorflow as tf
import numpy as np
tf.reset_default_graph()
with tf.variable_scope('old'):
conv1 = tf.get_variable('conv1_1', shape=(11, 11, 3, 64), initializer=tf.contrib.layers.xavier_initializer())
with tf.variable_scope('new'):
conv_res_1 = tf.get_variable('conv1_1', shape=(11, 11, 3, 20), initializer=tf.contrib.layers.xavier_initializer())
assign_op = tf.assign(conv_res_1,conv1[:,:,:,:20])
with tf.Session() as sess:
tf.global_variables_initializer().run()
w_1, w_res_1 = sess.run([conv1, assign_op])
assert np.all(w_1[:,:,:,:20] == w_res_1)
print(w_1[0,0,0,0], w_res_1[0,0,0,0])
Обновление : если вы в порядке с потерей переменной большего размераВы можете сделать следующее. Это возьмет conv_1 и заменит переменную меньшей.
import tensorflow as tf
tf.reset_default_graph()
conv1 = tf.get_variable('conv1_1', shape=(11, 11, 3, 64), initializer=tf.contrib.layers.xavier_initializer())
assign_op = tf.assign(conv1, conv1[:,:,:,:20], validate_shape=False)
with tf.Session() as sess:
tf.global_variables_initializer().run()
sess.run(assign_op)