2016-11-24 3 views
1

"순수한"그래디언트 디센트 또는 좀 더 정교한 기술로 훈련 할 수있는 3 개의 숨겨진 레이어가있는 신경망이 있습니다. 나는 또한 나의 문제에서 기세에 기반한 최적화 방법 (adam, adadelta, momentum)이 훨씬 더 잘 작동한다는 것을 알아 냈다.tensorflow에서 특정 레이어의 운동량을 비활성화하는 방법은 무엇입니까?

흥미로운 부분입니다. 설계 상으로는 NN의 첫 번째 계층에서 모멘텀을 비활성화하고자합니다. 즉, 두 번째 및 세 번째 레이어에서 Adam으로 가중치를 업데이트하지만 첫 번째 레이어에서 간단한 그래디언트 디센트를 사용하고 싶습니다.

물론 내 자신의 최적화 도구를 쓸 수 있습니다. 즉, tf.gradients(loss, tf.trainable_variables())으로 그라디언트를 계산 한 다음 나 자신의 기세를 속이십시오. 그러나 모든 레이어에서 특별한 옵티 마이저 매개 변수를 사용하는 옵션을 갖는 것이 좋습니다. 그런 일을하는 방법에 대해 누구라도 들었습니까?

+0

네트워크에서 레이어를 어떻게 정의합니까? 난''W_1 = tf.Variable 생각 – sygi

+0

특별한 아무것도 ( tf.truncated_normal ([HIDDEN_0_SIZE, HIDDEN_1_SIZE]을 STDDEV = 1/np.sqrt (HIDDEN_0_SIZE)) NAME = 'W') B_1 = TF .Variable (tf.zeros ([HIDDEN_1_SIZE), 이름 = 'B') = hidden_1 tf.matmul (activation_0_drop, W_1) + B_1 activation_1 = tf.nn.relu (hidden_1 이름 = '활성화') activation_1_drop = tf.nn.dropout (activation_1, keep_prob)'''markdown이 모든 새로운 행을 삭제하는 이유는 모르겠다. ( – iezepov

+0

게시물을 편집하면 새로운 행은 주석과 함께 작동하지 않는다. 거기에 :) – sygi

답변

1

글쎄, 당신은 최적화 (docs)에 최적화 변수의 목록을 제공 할 수

opt = tf.train.AdamOptimizer() 
opt_op = opt.minimize(loss, var_list=[W1, b1]) 
opt2 = tf.train.GradientDescentOptimizer(learning_rate) 
opt2_op = opt2.minimize(loss, var_list=[W2, b2]) 

당신은 변수 목록 주어진 층 자신의 (아마도 무게와 편견)을 추출해야합니다.

+0

아이디어를 가져 주셔서 감사합니다! 그러나 그런 식으로 나는 첫 번째 레이어에서 최적화 도구에 제공하지 않음으로써 교육을 전혀 사용하지 못하게 할 수 있습니다. 그러나 나는 여전히 그것을 훈련시키고 싶지만 운동량을 사용한다. 아마 첫 번째 레이어의 경우 GradientDescent와 그 밖의 모든 경우의 Adam이라는 두 가지 최적화 도구를 사용할 수 있습니다. – iezepov

+1

수정 사항을 참조하십시오. 두 개의 옵티 마이저를 정의하면 각각 하나가 해당 변수를 업데이트 할 수 있습니다. 그리고'sess.run ([opt_op, opt2_op])'에서 그것들을 함께 실행한다면, 나는 그라디언트가 한 번만 계산된다는 것을 알 수 있습니다. – sygi

관련 문제