2017-09-08 4 views
1

이전에 학습 한 가중치 인 m을 사용하여 n의 가중치 텐서를 n > m으로 초기화하려고합니다. 내가 한 것처럼 할 수 있습니다.Tensorflow - 이전에 습득 한 가중치를 사용하여 다른 차원의 새 가중치 초기화

all_weights['w1'] = tf.Variable(tf.zeros([n, output_sz], dtype=tf.float32)) 
all_weights['w1'] = all_weights['w1'][:m,:].assign(initial_weights['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로 캐스팅하는 것이 어떤 사람들에게는 의미가 있습니까? 나는 이렇게하려고했지만 다음과 같은 오류가 발생합니다.

`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에 비교적 익숙해 져서 어떤 도움을 주시면 감사하겠습니다. 감사!

답변

1

tf.VariableTensor과 매우 다른 것입니다. 그들 사이에 "캐스팅"하는 것은 의미가 없습니다.

가장 쉬운 해결책은 작성시 직접 initial_weights을 사용하는 것입니다. 예 : 다음과 같은 내용 :

import numpy as np 
tf.Variable(np.append(initial_weights['w1'], 
         np.zeros((n-m, output_sz)), 
         axis=0), 
      dtype=tf.float32) 
관련 문제