2017-11-26 12 views
0

tensorflow에서 다음 코드를 사용하여 다중 레이어 신경망의 가중치를 초기화하려고합니다.for 루프와 xavier를 사용하여 tensorflow에서 간단한 심 신경 네트워크의 가중치를 초기화하는 방법은 무엇입니까?

def initialize_parameters(layers_dims): 
    parameters = {} 
    tf.set_random_seed(1)     

    L = len(layers_dims) 

    for l in range(1, L): 
     parameters['W' + str(l)] = tf.get_variable("parameters['W' + str(l)]", [layers_dims[l],layers_dims[l-1]], initializer = tf.contrib.layers.xavier_initializer(seed = 1)) 
     parameters['b' + str(l)] = tf.get_variable("parameters['b' + str(l)]", [layers_dims[l],1], initializer = tf.zeros_initializer()) 
    return parameters 

내가 tf.get.variableparameters['W' + str(l)]로 변수의 이름을 취할 수 없다는 것을 말한다 오류를 얻고있다

layers_dims = [100,1] 
tf.reset_default_graph() 
with tf.Session() as sess: 
    parameters = initialize_parameters(layers_dims) 

나는이 함수를 호출하고있는 방법입니다. 대신 W1 또는 b1과 같은 이름을 사용하면 올바르게 작동합니다.

내 목표는 "L"레이어 신경망을 초기화하고 매개 변수를 사전에 매개 변수로 저장하는 것입니다.

주위에 경로가 있습니까?

답변

1

파이썬이 실행해야하는 코드를 문자열에 넣었습니다. 그냥이 문제를 해결하면 괜찮을거야. 여기

parameters['W' + str(l)] = tf.get_variable("parameters['W' + str(l)]", [layers_dims[l],layers_dims[l-1]], initializer = tf.contrib.layers.xavier_initializer(seed = 1)) 
parameters['b' + str(l)] = tf.get_variable("parameters['b' + str(l)]", [layers_dims[l],1], initializer = tf.zeros_initializer()) 

, 당신은 이름 "parameters['b' + str(l)]"으로 (즉, 파이썬이 제대로 parameters["W1"], parameters["W2"] 평가 등) 파이썬 변수 parameters['W' + str(l)]에서 tensorflow 변수를 지정하고 있습니다. 보시다시피 이름은 상수 문자열입니다.

대신 파이썬이 parameters['b' + str(l)] 문을 평가해야합니다.

그러므로 이중 따옴표를 제거하여 문자열 "parameters['b' + str(l)]"을 파이썬 인터프리터가 실행할 연결 작업으로 만듭니다. parameters 사전 검색을 삭제해야합니다. 잘못된 것이므로 (아직 존재하지 않는 특정 키에 대한 사전을 찾고있는 중입니다.)

parameters['W' + str(l)] = tf.get_variable('W' + str(l), [layers_dims[l],layers_dims[l-1]], initializer = tf.contrib.layers.xavier_initializer(seed = 1)) 
parameters['b' + str(l)] = tf.get_variable('b' + str(l), [layers_dims[l],1], initializer = tf.zeros_initializer()) 
0

TLDR : TensorFlow가 유효한 이름인지 확인하기 때문에 변수 이름이 유효하지 않습니다.

File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/ops.py", line 3172, in name_scope 
    raise ValueError("'%s' is not a valid scope name" % name) 

그런 다음 마스터를 확인할 수 있습니다 : 당신이 다시 그것을 추적하는 경우, 당신이 그것을에서 오류를 던지고 것을 알 수

ValueError: 'parameters['W' + str(l)]' is not a valid scope name 

: 당신이 얻고있는

오류는 이것이다 TensorFlow 코드베이스 on line 3603 here. 이 기능을 읽고 더 아래 line 3671로 스크롤하면이 오류가 발생 정규식을 참조하십시오 'B1' 'W1'또는 작동 왜

NOTE: This constructor validates the given `name`. Valid scope 
names match one of the following regular expressions: 
    [A-Za-z0-9.][A-Za-z0-9_.\\-/]* (for scopes at the root) 
    [A-Za-z0-9_.\\-/]* (for other scopes) 

이입니다.