人工知能.

15742 ワード

01-Tensorプロセスによる線形回帰


1-1. Tensor flowによる線形回帰

  • スーパーパラメータ
  • を設定する方法を決定します.
  • 線形回帰学習方法
  • を習得する
    最適化直線を
  • 元データと可視化比較
  • 🟣 必要なモジュールの読み込み
    # 텐서플로 라이브러리와 시각화 라이브러리인 matplotlib.pyplot을 불러오기
    import tensorflow as tf
    import matplotlib.pyplot as plt
    
    tf.__version__
    # 결과확인
    # '2.6.0'
    🟣 スーパーパラメータの設定
  • スーパーパラメータ
  • を作成
  • 学習率学習rate
  • 学習回数num epochs
  • 進捗出力ステップstep display
  • learning_rate = 0.01
    num_epochs = 1000
    step_display = 50
    🟣 学習用データの定義
    # x와 y좌푯값을 각각 정의 --> x, y의 개수는 같아야 함
    x = [2.7, 4.8, 9.3, 13.4, 24.8, 31.3, 48.5, 53.0, 68.1, 74.2, 88.6, 94.5]
    y = [7.0, 28.8, 22.8, 67.1, 48.8, 100.2, 140.0, 190.2, 215.2, 285.6, 260.3, 251.1]
    
    # assert문을 활용해 x, y의 개수가 같지 않으면 에러가 발생하게 됨
    # len(x)의 실행 결과로 총 개수는 12개임을 확인 할 수 있음
    assert len(x) == len(y)
    len(x)
    
    # 실행 결과
    # 12
  • 天書flowの代表変数は重み付けとオフセット
  • である.
    したがって、
  • は、重みおよびオフセット量を変数
  • に設定.
    # tf.random_uniform() 함수는 무작위 수로 초기화
    # [1]은 변수의 형태, -1.0은 최솟값, 1.0은 최댓값 (즉, -1.0~1.0 사이의 스칼라값을 무작위로 생성)
    # name은 텐서플로에 이름을 알려주려고 사용
    weight = tf.Variable(tf.random.uniform([1], -1.0, 1.0), name='weight')
    bias = tf.Variable(tf.random.uniform([1], -1.0, 1.0), name='bias')
    
    # compatibility mode를 적용해 1.x 버전의 기능을 그대로 사용할 수 있음 
    # 위와 같이 tf.disable_v2_behavior()를 실행해서 tf.placeholder를 그대로 사용할 수 있음
    import tensorflow.compat.v1 as tf 
    tf.disable_v2_behavior()
    
    # 모델을 학습시킬 때 x좌표와 y좌표를 피드해줄 플레이스홀더 정의함
    # 앞에서 가중치와 편향은 변수로 정의했으므로, 텐서플로의 계산 그래프를 구축할 때, 메모리 저장
    x_true = tf.placeholder(dtype=tf.float32, name='x_true')
    y_true = tf.placeholder(dtype=tf.float32, name='y_true')
  • 液晶カートリッジは、グラフィックを構築する際にメモリに記憶されず、実際にグラフィックを実行する際にはシード形式でメモリに記憶され、
  • .
    🟣 グラフィックの作成
    # 예측값인 y_pred를 가중치 weight와 x 좌표를 피드해줄 플레이스 홀더 x_true의 곱에 편향 bias를 더한 값으로 정의함
    y_pred = tf.add(tf.math.multiply(weight, x_true), bias)
    
    # 예측값인 y_pred에서 실제값인 y_true를 뺀 값에 제곱해서 평균을 계산한 값이 비용(cost or loss)
    cost = tf.reduce_mean(tf.square(y_pred - y_true))
    
    # 비용을 최소화할 optimizer를 정의함
    optimizer = tf.train.AdamOptimizer(learning_rate).minimize(cost)
    🟣 勉強を始める
    # 세션을 실행하고 변수를 초기화함
    # 텐서플로는 세션 실행 시, 반드시 모두 전역 변수를 초기화해야 함
    init = tf.global_variables_initializer()
    sess = tf.Session()
    sess.run(init)
    
    for epoch in range(num_epochs):
        _, c = sess.run([optimizer,cost], feed_dict={x_true: x, y_true: y})
        if (epoch+1) % step_display == 0:
            print("Epoch: {0}, cost: {1}, weight: {2}, bias: {3}".format(
                epoch+1, c, sess.run(weight), sess.run(bias)))
    
    print("최적화 작업을 완료했습니다.")
  • 12000回学習し、x座標とy座標を入力してオプティマイザとコストを実行
  • 、学習50回ごとにepoch、cost、weight、biasの中間結果値
  • を出力する
    # 최종 비용, 가중치, 편향을 구해 출력함
    training_cost = sess.run(cost, feed_dict={x_true: x, y_true: y})
    print("최종 cost: {}".format(c))
    print("최종 weight: {}".format(sess.run(weight)))
    print("최종 bias: {}".format(sess.run(bias)))
    
    # 실행 결과
    # 최종 cost: 619.3222045898438
    # 최종 weight: [3.067179]
    # 최종 bias: [1.819138]
    🟣 図形で直線を比較する
  • roでは、rは赤色、oは円
  • を表す
  • 学習最適化線
  • 図例(図例()
  • 可視化グラフィック出力ボックス
  • # 시각화하기
    plt.plot(x, y, 'ro', label='Original data')
    plt.plot(x, sess.run(weight) * x + sess.run(bias), label='Original line')
    plt.legend()
    plt.show()