我正在尝试使用之前学习的维度m
权重来初始化维度n
的权重张量,其中n > m
。我可以这样做,就像我在下面所做的那样。
all_weights['w1'] = tf.Variable(tf.zeros([n, output_sz], dtype=tf.float32))
all_weights['w1'] = all_weights['w1'][:m,:].assign(initial_weights['w1'])
然而,如果我不使用体重分享,我实际学习时会遇到一个问题。 w1
最初是tf.Variable,我注意到它在切片赋值后更改为Tensor对象:Tensor("strided_slice/_assign:0")
。我的问题是我收到了错误:
`LookupError: No gradient defined for operation 'strided_slice_2/_assign' (op type: StridedSliceAssign)`.
这与类型(Tensor vs tf.Variable)有关吗?有些人如何将Tensor投射到tf.Variable是否有意义?我试图这样做,但后来我得到一个错误:
`FailedPreconditionError: Attempting to use uninitialized value Variable_4
[[Node: strided_slice/_assign = StridedSliceAssign[Index=DT_INT32, T=DT_FLOAT, _class=["loc:@Variable_4"], begin_mask=3, ellipsis_mask=0, end_mask=2, new_axis_mask=0, shrink_axis_mask=0, _device="/job:localhost/replica:0/task:0/cpu:0"](Variable_4, strided_slice/stack, strided_slice/stack_1, strided_slice/stack_2, strided_slice/_assign/value)]]`
我对Tensorflow相对较新,所以任何帮助都会受到高度赞赏。谢谢!
答案 0 :(得分:1)
tf.Variable
与Tensor
完全不同。在他们之间“施放”是没有意义的。
最简单的解决方案是直接在initial_weights
创建中使用Variable
。例如,像这样:
import numpy as np
tf.Variable(np.append(initial_weights['w1'],
np.zeros((n-m, output_sz)),
axis=0),
dtype=tf.float32)