이 페이지는 Cloud Translation API를 통해 번역되었습니다.
Switch to English

tf.keras.mixed_precision.experimental.LossScaleOptimizer

참조 박을

TensorFlow 1 개 버전 GitHub의에서 소스보기

손실 스케일링을 적용되는 최적화.

: 상속 Optimizer

전자 필기장에서 사용

가이드에서 사용

감소 스케일링을 승산이 승산기에 의한 손실이 손실 스케일이라고하는 과정이고, 동일한 승산하여 각 구배를 분할한다. 이 과정에 대한 의사 코드는 다음과 같습니다

 loss = ...
loss *= loss_scale
grads = gradients(loss, vars)
grads /= loss_scale
 

수학적으로, 손실 스케일링이 적용되지 않습니다,하지만 float16과 텐서를 사용하는 경우 중간 그라데이션을 피하기 수치 언더 플로우를 할 수 있습니다. 손실 곱함으로써, 각각의 중간 구배 동일한 배율을 적용 할 것이다.

손실 스케일 중 사용자가 선택한 고정 상수이거나, 동적으로 결정된다. 동적 손실 규모를 결정하는 손실 규모가 명시 적으로 선택해야 할 필요가 없기 때문에 편리합니다. 그러나 성능이 저하됩니다.

이 최적화는 다른 최적화를 래핑하고를 통해에 손실 스케일링을 적용 LossScale . 감소 스케일링은 그래디언트가 계산 될 때마다, 어느 하나를 통해인가 minimize() 또는 get_gradients() . 손실 스케일을 통해 갱신된다 LossScale.update() 구배가인가 될 때마다, 어느 하나를 통해 minimize() 또는 apply_gradients() . 예를 들면 :

opt = tf.keras.optimizers.SGD(0.25)
opt = tf.keras.mixed_precision.experimental.LossScaleOptimizer(opt,
                                                               "dynamic")
var = tf.Variable(1.)
loss_fn = lambda: var ** 2
# 'minimize' applies loss scaling to the loss and updates the loss sale.
opt.minimize(loss_fn, var_list=var)
var.numpy()
0.5

경우 tf.GradientTape 대신 계산 그라디언트에 사용되는 LossScaleOptimizer.minimize 또는 LossScaleOptimizer.get_gradients , 손실 및 그라디언트 수동으로 조정해야합니다. 이것은 호출하여 수행 할 수 있습니다 LossScaleOptimizer.get_scaled_loss 에 손실을 전달하기 전에 tf.GradientTapeLossScaleOptimizer.get_unscaled_gradients 으로 그라데이션을 계산 한 후 tf.GradientTape . 예를 들면 :

with tf.GradientTape() as tape:
  loss = loss_fn()
  scaled_loss = opt.get_scaled_loss(loss)
scaled_grad = tape.gradient(scaled_loss, var)
(grad,) = opt.get_unscaled_gradients([scaled_grad])
opt.apply_gradients([(grad, var)])  # Loss scale is updated here
var.numpy()
0.25

optimizer 옵티 마이저 인스턴스는 포장한다.
loss_scale 손실 규모는 손실과 그라디언트를 확장합니다. 이 중 고정 손실 스케일을 사용하는 INT / 유동 될 수 있고, 문자열 "동적"동적 손실 스케일링 또는 LossScale의 인스턴스를 사용한다. 전달 동등한 문자열 "동적" DynamicLossScale() 나타내는 int / 플로트 및 전달 주어진 손실 스케일이 FixedLossScale 전달 동등하다.

iterations 변하기 쉬운. 훈련의 수는이 최적화가 실행 단계를 반복합니다.
learning_rate

loss_scale LossScale 이 최적화와 관련된 인스턴스입니다.
lr

weights 생성 된 순서에 따라이 최적화의 반환 변수.

행동 양식

add_slot

소스보기

에 대한 새로운 슬롯 변수를 추가 var .

add_weight

소스보기

apply_gradients

소스보기

변수에 그라디언트를 적용합니다.

이것은 두 번째 부분 minimize() . 그것은 반환 Operation 그라데이션을 적용합니다.

이 방법은 존재의 모든 복제본에서 그라디언트를 요약 tf.distribute.Strategy 기본적으로. 당신은 전달하여 그라데이션을 직접 집계 할 수 experimental_aggregate_gradients=False .

예:

 grads = tape.gradient(loss, vars)
grads = tf.distribute.get_replica_context().all_reduce('sum', grads)
# Processing aggregated gradients.
optimizer.apply_gradients(zip(grads, vars),
    experimental_aggregate_gradients=False)

 

인수
grads_and_vars (구배, 변수) 쌍 목록.
name 반환 된 작업에 대한 선택적 이름입니다. 에 전달 이름으로 기본 Optimizer 생성자입니다.
experimental_aggregate_gradients 여부는의 presense에 다른 복제본에서 그라디언트를 요약하는 tf.distribute.Strategy . false의 경우, 그것의 사용자 책임은 그라디언트를 집계합니다. True로 기본.

보고
Operation 지정된 그라디언트를 적용합니다. iterations 자동으로 1 씩 증가됩니다.

제기
TypeError 경우 grads_and_vars 잘못되었습니다.
ValueError 경우 변수 중 어느 것도 그라데이션이 없습니다.

from_config

소스보기

그 설정에서 최적화를 작성합니다.

이 방법은, 역방향 인 get_config 는 config 사전에서 동일한 최적화를 인스턴스화 할.

인수
config 파이썬 사전, GET_CONFIG의 일반적으로 출력.
custom_objects 추가 파이썬 파이썬 사전 매핑 이름이 같은 hyperparameter에 사용되는 함수로,이 최적화를 만드는 데 사용되는 객체.

보고
옵티 마이저 인스턴스입니다.

get_config

소스보기

최적화 프로그램의 설정을 돌려줍니다.

옵티 마이저의 구성은 최적화의 구성을 포함하는 사전 파이썬 (직렬화)이다. 같은 최적화는 이러한 구성에서 (모든 저장된 상태)없이 나중에 다시 인스턴스화 될 수있다.

보고
파이썬 사전.

get_gradients

소스보기

의 기울기를 돌려 loss 에 대한 params .

인수
loss 손실 텐서.
params 변수의 목록.

보고
구배 텐서의 목록.

제기
ValueError 어떤 경우 그래디언트가 계산 될 수 없다 (예를 들어 기울기 기능이 구현되지 않는 경우).

get_scaled_loss

소스보기

손실 규모에 의한 손실을 조정합니다.

당신이 수동으로 예를 그라데이션을 계산하는 경우이 방법은 필요 tf.GradientTape . 이 경우에 손실을 전달하기 전에 손실 스케일이 메소드를 호출 tf.GradientTape . 당신이 사용하는 경우 LossScaleOptimizer.minimize 또는 LossScaleOptimizer.get_gradients , 손실 스케일링은 자동으로 적용되며,이 방법은 불필요한 것입니다.

이 메소드가 호출되면, get_unscaled_gradients 또한 호출해야합니다. 참고 항목 tf.keras.mixed_precision.experimental.LossScaleOptimizer 예는 문서를.

인수
loss 손실 규모를 곱한 것이다 손실. 중 하나 텐서 또는 텐서를 반환하는 호출 할 수 있습니다.

보고
loss 곱한 LossScaleOptimizer.loss_scale() .

get_slot

소스보기

get_slot_names

소스보기

이 최적화의 슬롯 이름의 목록입니다.

get_unscaled_gradients

소스보기

손실 규모로 그라데이션을 Unscales.

당신이 수동으로 예를 그라데이션을 계산하는 경우이 방법은 필요 tf.GradientTape . 이 경우, 그들을 계산 후 그라디언트 unscale이 메소드를 호출 tf.GradientTape . 당신이 사용하는 경우 LossScaleOptimizer.minimize 또는 LossScaleOptimizer.get_gradients , 손실 스케일링은 자동으로 적용되며,이 방법은 불필요한 것입니다.

이 메소드가 호출되면, get_scaled_loss 또한 호출해야합니다. 참고 항목 tf.keras.mixed_precision.experimental.LossScaleOptimizer 예는 문서를.

인수
grads 손실의 크기로 나눈 것이다 텐서 각각의 목록. 무시됩니다 없음 값을 가질 수 있습니다.

보고
새로운리스트와 동일한 사이즈 grads 모든 비 없음 값 grads 로 나누어 LossScaleOptimizer.loss_scale() .

get_updates

소스보기

get_weights

소스보기

최적화의 현재 가중치를 돌려줍니다.

옵티 마이저의 가중치는 상태 (즉, 변수)입니다. 이 기능은 NumPy와 배열의 목록으로,이 최적화와 관련된 가중치 값을 반환합니다. 제 값은 반복들이 생성 된 순서의 최적화 상태 변수 뒤에, 최적화의 계산 항상. 반환 된 목록은 다시 유사 파라미터 최적화에 부하 상태로 사용할 수 있습니다.

예를 들어,이 간단한 모델의 RMSprop 최적화 프로그램은 커널과 단일 조밀 한 층의 바이어스의 평균 제곱근 다음에 반복 횟수를 values-- 세의 목록을 반환합니다 :

opt = tf.keras.optimizers.RMSprop()
m = tf.keras.models.Sequential([tf.keras.layers.Dense(10)])
m.compile(opt, loss='mse')
data = np.arange(100).reshape(5, 20)
labels = np.zeros(5)
print('Training'); results = m.fit(data, labels)
Training ...
len(opt.get_weights())
3

보고
NumPy와 배열 목록으로 무게 값.

minimize

소스보기

최소화 loss 업데이트로 var_list .

이 방법은 간단하여 기울기 계산 tf.GradientTape 걸고 apply_gradients() . 당신은 전화 후 적용하기 전에 기울기를 처리 할 경우 tf.GradientTapeapply_gradients() 명시 적으로 대신이 기능을 사용.

인수
loss 호출 가능한 최소화하기 위해 값을 반환 인수를 복용하지 않습니다.
var_list 목록 또는 튜플 Variable 최소화하기 위해 업데이트와 객체 loss , 또는 호출은 목록이나 튜플 반환 Variable 개체를. 변수 목록 달리 완전 이전 될 때 호출 사용 minimize 변수가 처음에 생성되기 때문에 loss 이라고합니다.
grad_loss 선택 과목. Tensor 대해 계산 기울기 지주 loss .
name 반환 된 작업에 대한 선택적 이름입니다.

보고
Operation 의 변수를 업데이트 var_list . iterations 자동으로 1 씩 증가됩니다.

제기
ValueError 일부 변수가없는 경우 Variable 객체.

set_weights

소스보기

최적화의 가중치를 설정합니다.

옵티 마이저의 가중치는 상태 (즉, 변수)입니다. 이 함수는 NumPy와 배열의 목록 등이 최적화와 연관된 가중치 걸린다. 제 값은 반복들이 생성 된 순서의 최적화 상태 변수 뒤에, 최적화의 계산 항상. 전달 된 값은 최적화의 새로운 상태를 설정하는 데 사용됩니다.

예를 들어, 간단한 모델의 RMSprop 최적화 커널과 단일 멤브레인 층의 바이어스의 평균 제곱근 뒤에 반복 횟수를 세 values-- 목록은 취

opt = tf.keras.optimizers.RMSprop()
m = tf.keras.models.Sequential([tf.keras.layers.Dense(10)])
m.compile(opt, loss='mse')
data = np.arange(100).reshape(5, 20)
labels = np.zeros(5)
print('Training'); results = m.fit(data, labels)
Training ...
new_weights = [np.array(10), np.ones([20, 10]), np.zeros([10])]
opt.set_weights(new_weights)
opt.iterations
<tf.Variable 'RMSprop/iter:0' shape=() dtype=int64, numpy=10>

인수
weights NumPy와 배열 목록으로 가중치.

variables

소스보기

생성 된 순서에 따라이 최적화의 반환 변수.