TensorFlow에서 자주 사용하는 함수
하나의 계산도에서 집합(
collection
을 통해 서로 다른 종류의 자원을 관리할 수 있다.예를 들어 tf.add_to_collection
함수를 통해 자원을 한 개 이상의 집합에 넣고 tf.get_collection
를 통해 한 집합 안의 모든 자원을 얻을 수 있다(예를 들어 장량, 변수,TensorFlow 프로그램을 실행하는 데 필요한 대기열 자원 등).예를 들어 tf.add_n(tf.get_collection('losses'))
를 통해 총 손실을 얻는다.컬렉션 이름
컨텐트 모으기
장면 작업
tf.GraphKeys.VARIABLES
모든 변수
영구화TensorFlow 모델
tf.GraphKeys.TRAINABLE_VARIABLES
학습 가능한 변수(일반적으로 신경 네트워크의 매개 변수를 가리킨다)
모형 훈련, 모형 시각화 내용 생성
tf.GraphKeys.SUMMARIES
로그 생성 관련 장량
TensorFlow 컴퓨팅 시각화
tf.GraphKeys.QUEUE_RUNNERS
입력한 QueueRunner 처리
입력 처리
tf.GraphKeys.MOVING_AVERAGE_VARIABLES
미끄럼 평균치를 계산한 모든 변수
변수의 미끄럼 평균치를 계산하다
tf.GraphKeys.VARIABLES
집합에 추가되며tf.global_variables()
함수를 통해 현재 계산도에 있는 모든 변수를 얻을 수 있습니다.계산도에 있는 모든 변수를 가져오면 전체 계산도의 운행 상태를 지속시키는 데 도움이 된다.trainable
파라미터를 통해 최적화해야 하는 매개 변수(예를 들어 신경 네트워크의 매개 변수)와 다른 매개 변수(예를 들어 교체된 바퀴수, 즉 초매개 변수)를 구분할 수 있다. trainable = True
라면 이 변수는 tf.GraphKeys.TRAINABLE_VARIABLES
집합에 추가된다.그리고 tf.trainable_variables
함수를 통해 최적화가 필요한 모든 매개 변수를 얻을 수 있다.TensorFlow에서 제공하는 최적화 알고리즘은 tf.GraphKeys.TRAINABLE_VARIABLES
집합의 변수를 기본 최적화 대상으로 한다.예제
tf.get_collection
의 첫 번째 파라미터는 집합의 이름이고, 두 번째 파라미터는 집합의 내용을 추가할 것이다.def get_weight(shape, lambda1):
#
var = tf.Variable(tf.random_normal(shape), dtype=tf.float32)
# L2 'losses'
tf.add_to_collection('losses',
tf.contrib.layers.l2_regularizer(lambda1)(var))
return var
변수 초기화 함수
신경 네트워크의 매개 변수는 TensorFlow의 변수를 통해 조직, 저장 및 사용된다.TensorFlow는 두 가지 변수 메커니즘을 제공했다.
tf.Variable
와 tf.get_variable
.validate_shape = False
(거의 바꾸지 않음)함수명
무작위 분포
주요 매개 변수
tf.random_normal
정적 분포
평균, 표준차, 수치 유형
tf.truncated_normal
정적 분포의 랜덤 값을 만족시키지만, 랜덤 값이 평균치에서 두 개의 표준차를 초과하면 이 수는 다시 랜덤으로
평균, 표준차, 수치 유형
tf.random_uniform
평균 분포
최대, 최소, 값 유형
tf.random_gamma
Gramma 분포
형태 매개 변수 알파, 척도 매개 변수 베타, 값 형식
상수 초기화 함수
함수명
기능
예제
tf.zeros
전체 0의 배열 생성
tf.zeros([2, 3],tf.int32)
tf.ones
전체 1의 그룹 생성
tf.ones([2, 3],tf.int32)
tf.fill
주어진 그룹을 모두 만드는 그룹
tf.fill([2,3], 9)
tf.constant
주어진 값의 상수를 생성하다
tf.constant([2,3,4])
tf.get_variable
변수 초기화 함수초기화 함수
기능
주요 매개 변수
tf.constant_initializer
변수를 주어진 상수로 초기화하기
상수의 값
tf.random_normal_initializer
변수를 정적 분포를 만족시키는 무작위 값으로 초기화하다
정적 분포의 균일치와 표준차
tf.truncated_normal_initializer
변수를 정적 분포를 만족시키는 무작위 값으로 초기화하지만, 무작위 값이 평균치에서 2개의 표준차를 초과하면 이 수는 다시 무작위로
정적 분포의 균일치와 표준차
tf.random_uniform_initializer
변수를 평균 분포를 만족시키는 무작위 값으로 초기화하다
최대, 최소값
tf.uniform_unit_scaling_initializer
변수를 평균 분포를 충족시키지만 출력 수량급에 영향을 주지 않는 무작위 값으로 초기화
factor
tf.zeros_initializer
변수를 전체 0으로 초기화
변수 차원
tf.ones_initializer
변수를 전체 1로 초기화
변수 차원
tf.get_variable
가 변수를 만드는 데 사용될 때, 그것과 tf.Variable
의 기능은 기본 등가이다.tf.get_variable
와 tf.Variable
의 가장 큰 차이점은 변수 이름을 지정하는 매개 변수에 있다.tf.Variable
함수에 대해 변수 명칭은 선택할 수 있는 매개 변수로 name='v'
의 형식을 통해 제시한다.tf.get_variable
함수는 이 이름에 따라 변수를 만들거나 가져옵니다.자세한 내용은 변수 관리 참조
기타
tf.get_variable
함수는 장량을 일정한 범위 내에 한정한다.import tensorflow as tf
sess = tf.InteractiveSession()
v = tf.constant([[1., 2., 3.], [4., 5., 6.]])
tf.clip_by_value(v, 2.5, 4.5).eval() # 2.5 2.5, 4.5 4.5
array([[2.5, 2.5, 3. ],
[4. , 4.5, 4.5]], dtype=float32)
tf.clip_by_value
장량의 모든 원소에 대해 대수 연산을 한다tf.log(v).eval()
array([[0. , 0.6931472, 1.0986123],
[1.3862944, 1.609438 , 1.7917595]], dtype=float32)
tf.log
, 이 두 장량 중의 모든 원소를 비교하고 비교 결과를 되돌려준다.v1 = tf.constant([1., 2., 3., 4.])
v2 = tf.constant([4., 3., 2., 1.])
f = tf.greater(v1, v2)
f.eval()
array([False, False, True, True])
tf.greater
비교 함수함수에는 세 가지 매개변수가 있습니다.
tf.where
일 때 두 번째 매개 변수의 값을 선택하고, 그렇지 않으면 세 번째 매개 변수의 값을 사용합니다. tf.where(f, v1, v2).eval()
array([4., 3., 3., 4.], dtype=float32)
지수 감쇠 학습률
True
함수지수 쇠퇴 학습률.tf.train.exponential_decay
tf.train.exponential_decay(learning_rate, global_step, decay_steps, decay_rate, staircase=False, name=None)
: 사전에 설정된 초기 학습률learning_rate
: 쇠퇴 속도decay_steps
시 훈련 데이터를 완전하게 사용하는데 필요한 교체 라운드수(=총훈련 샘플수/매개batch의 훈련 샘플수)staircase = True
: 쇠퇴계수decay_rate
: 기본값staircase
으로 이때 학습률은 교체 윤수에 따라 연속적(지수 함수)이다.False
일 때True
는 정수로 바뀌는데 이때 학습률은 계단 함수예:
TRAINING_STEPS = 100
global_step = tf.Variable(0)
LEARNING_RATE = tf.train.exponential_decay(
0.1, global_step, 1, 0.96, staircase=True)
x = tf.Variable(tf.constant(5, dtype=tf.float32), name="x")
y = tf.square(x)
train_op = tf.train.GradientDescentOptimizer(LEARNING_RATE).minimize(
y, global_step=global_step)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
for i in range(TRAINING_STEPS):
sess.run(train_op)
if i % 10 == 0:
LEARNING_RATE_value = sess.run(LEARNING_RATE)
x_value = sess.run(x)
print("After %s iteration(s): x%s is %f, learning rate is %f." %
(i + 1, i + 1, x_value, LEARNING_RATE_value))
After 1 iteration(s): x1 is 4.000000, learning rate is 0.096000.
After 11 iteration(s): x11 is 0.690561, learning rate is 0.063824.
After 21 iteration(s): x21 is 0.222583, learning rate is 0.042432.
After 31 iteration(s): x31 is 0.106405, learning rate is 0.028210.
After 41 iteration(s): x41 is 0.065548, learning rate is 0.018755.
After 51 iteration(s): x51 is 0.047625, learning rate is 0.012469.
After 61 iteration(s): x61 is 0.038558, learning rate is 0.008290.
After 71 iteration(s): x71 is 0.033523, learning rate is 0.005511.
After 81 iteration(s): x81 is 0.030553, learning rate is 0.003664.
After 91 iteration(s): x91 is 0.028727, learning rate is 0.002436.
정규화
w = tf.constant([[1., -2.], [-3, 4]])
with tf.Session() as sess:
print(sess.run(tf.contrib.layers.l1_regularizer(.5)(w))) # 0.5
print(sess.run(tf.contrib.layers.l2_regularizer(.5)(w)))
5.0
7.5
슬라이딩 평균 모형
슬라이딩 평균 모델은 매 라운드에서 교체된 모델을 종합하여 최종적으로 얻어진 모델을 테스트 데이터에 더욱 건장하게 (robust)할 수 있다.
global_step/decay_steps
는 모델의 업데이트 속도를 제어하기 위해 쇠퇴율(decay)을 제공해야 한다.Exponential Moving Average는 모든 변수에 대해 그림자 변수(shadow variable)를 유지합니다. 이 그림자 변수의 초기 값은 해당 변수의 초기 값입니다. 변수가 업데이트될 때마다 그림자 변수의 값은 다음과 같이 업데이트됩니다.
\[\text{shadow_variable} =\text{decay}\times\text{shadow_variable} + (1 -\text{decay})\times\text{variable}\]
tf.train.ExponentialMovingAverage
매개변수를 사용하여 decay 크기를 동적으로 설정할 수도 있습니다.\[\text{decay} =\min\begin{Bmatrix}\text{decay},\frac{1 +\text{num_updates}}{10 +\text{num_updates}}\end{Bmatrix}\]
변수 및 슬라이딩 평균 클래스 정의
import tensorflow as tf
# , 0,
v1 = tf.Variable(0, dtype=tf.float32)
# step ,
step = tf.Variable(0, trainable=False)
# (class)。 0.99 step
ema = tf.train.ExponentialMovingAverage(0.99, step)
# 。 , , 。
maintain_averages_op = ema.apply([v1])
서로 다른 교체에서 변수 값의 변화를 보십시오.
with tf.Session() as sess:
#
init_op = tf.global_variables_initializer()
sess.run(init_op)
# ema.average(v1) 。 v1 v1 0
print(sess.run([v1, ema.average(v1)]))
# v1
sess.run(tf.assign(v1, 5))
sess.run(maintain_averages_op)
print(sess.run([v1, ema.average(v1)]))
# step v1
sess.run(tf.assign(step, 10000))
sess.run(tf.assign(v1, 10))
sess.run(maintain_averages_op)
print(sess.run([v1, ema.average(v1)]))
# v1
sess.run(maintain_averages_op)
print(sess.run([v1, ema.average(v1)]))
[0.0, 0.0]
[5.0, 4.5]
[10.0, 4.555]
[10.0, 4.60945]
num_updates
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.