TensorFlow에서 자주 사용하는 함수

9409 단어
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
미끄럼 평균치를 계산한 모든 변수
변수의 미끄럼 평균치를 계산하다
  • TensorFlow의 모든 변수는 자동으로 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.Variabletf.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
    변수를 평균 분포를 충족시키지만 출력 수량급에 영향을 주지 않는 무작위 값으로 초기화
    factortf.zeros_initializer
    변수를 전체 0으로 초기화
    변수 차원tf.ones_initializer
    변수를 전체 1로 초기화
    변수 차원tf.get_variable가 변수를 만드는 데 사용될 때, 그것과 tf.Variable의 기능은 기본 등가이다.tf.get_variabletf.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, 이 두 장량 중의 모든 원소를 비교하고 비교 결과를 되돌려준다.
  • 2장 입력
  • 입력 차원이 일치하지 않을 때 브로드캐스트(broadcasting)
  • 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}\]
  • shadow_variable는 그림자 변수,
  • variable는 업데이트 예정 변수
  • decay는 쇠퇴율로 크면 클수록 모델이 안정되고 실제 응용에서 decay는 일반적으로 1에 가까운 수로 설정된다.
  • 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
  • 좋은 웹페이지 즐겨찾기