Python Tensorflow-使用先前学习的权重初始化不同维度的新权重
我试图使用以前学习到的维度Python Tensorflow-使用先前学习的权重初始化不同维度的新权重,python,tensorflow,Python,Tensorflow,我试图使用以前学习到的维度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.变
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.变量,我注意到它在切片赋值后变成了一个张量对象:Tensor(“跨步切片/\u赋值:0”)
。我的问题是我得到了错误:
`LookupError: No gradient defined for operation 'strided_slice_2/_assign' (op type: StridedSliceAssign)`.
这与类型(张量vs.tf.变量)有关吗?把张量转换成tf变量对某些人来说有意义吗?我试图这样做,但随后出现如下错误:
`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的新手,因此非常感谢您的帮助。谢谢
tf.变量
与张量
是一个非常不同的东西。在他们之间“投”是没有意义的
最简单的解决方案是直接在变量
创建中使用初始权重
。例如,类似这样的内容:
import numpy as np
tf.Variable(np.append(initial_weights['w1'],
np.zeros((n-m, output_sz)),
axis=0),
dtype=tf.float32)