검색결과 리스트
글
Tensorflow에서 특정한 변수만 최적화하는 방법(How to train particular variable in Tensorflow)
최근 Tensorflow를 공부하면서 강화학습을 공부하고 있습니다. 오랜만에 Python을 다루는 것이기도 하며 인공신경망 기반의 인공지능도 구현할 수 있어 간단한 인공지능도 구현해보기도 합니다.
이번 포스팅에서는 train을 하는 과정에서 특정한 변수만을 사용하여 조건을 minimize 하는 방법에 대해 알아보도록 하겠습니다.
다음은 특정 Neural Network의 Output을 구현하는 과정을 나타낸 것입니다. 첫 번째 Output에서는 모든 Variable들을 훈련시키고 이후 새로운 Output을 구현하여 해당 Output layer만 minimize를 적용해보는 과정을 살펴볼 것입니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | y_ = tf.placeholder(tf.float32, shape=[None, 9]) y_add = tf.placeholder(tf.float32, shape=[None, 10]) # Output layer(first) W_fc2 = tf.Variable(tf.truncated_normal([500, 9], stddev=0.1)) b_fc2 = tf.Variable(tf.constant(0.1, shape=[9])) y_hat=tf.nn.softmax(tf.matmul(h_fc1, W_fc2) + b_fc2) # Output layer(additional) W_fc3 = tf.Variable(tf.truncated_normal([500, 10], stddev=0.1)) b_fc3 = tf.Variable(tf.constant(0.1, shape=[10])) y_hat2=tf.nn.softmax(tf.matmul(h_fc1, W_fc3) + b_fc3) # Train and Evaluate the Model cross_entropy = - tf.reduce_sum(y_*tf.log(y_hat)) train_step = tf.train.AdamOptimizer(1e-4).minimize(cross_entropy) # Addition layer train cross_entropy2 = -tf.reduce_sum(y_add*tf.log(y_hat2)) add_train = tf.train.AdamOptimizer(1e-4).minimize(cross_entropy2, var_list=[W_fc3, b_fc3]) | cs |
위 소스코드를 살펴보았을 때 두 개의 cross_entropy를 구현하였습니다. 첫 번째 output layer는 구현된 Neural Network 전체를 대상으로 최적화를 수행함으로 Optimizer 함수에서 cross_entropy를 변수로 하여 값을 구현합니다.
다음으로 구현되는 cross_entropy2는 새로운 Output layer를 구현하여 기존의 output layer를 대체하게 됩니다. 이 때 기존에 구현된 Neural Network는 그대로 사용한 채 새로운 Output layer를 대상으로 Minimize를 수행하고자 합니다. 이 Optimizer 함수에서 cross_entropy2 변수 뿐 아니라 var_list 변수에 특정 변수만 최적화 시킬 수 있도록 설정할 수 있습니다. 이 때 해당 변수명을 list [] 형식으로 변수들을 입력해두면 해당 변수만 훈련되는 것을 직접 확인하실 수 있습니다.
'공대생의 팁' 카테고리의 다른 글
[선형대수]Dominant Eigenvalue (0) | 2018.01.18 |
---|---|
Regular Point(정칙점), Singular Point(특이점) (0) | 2017.11.27 |
PIXLR 사용시 텍스트(글자)입력 및 저장이 되지 않을 때 (0) | 2016.09.18 |
자신의 리눅스에 설치된 폰트(글꼴) 검색 및 확인하는 방법 (1) | 2016.09.15 |
Windows 10에서 SSL이 적용된 사이트 접속이 되지 않을 때 해결방법 (2) | 2016.02.29 |