<SYSTEM_TASK:>
Given the following text description, write Python code to implement the functionality described below step by step
<END_TASK>
<USER_TASK:>
Description:
 그래프를 그리기 위해서 matplotlib을 임포트 합니다. %matplotlib inline은 새로운 창을 띄우지 않고 주피터 노트북 안에 이미지를 삽입하여 줍니다.
Step1:  텐서플로우를 tf 란 이름으로 임포트 하세요.
tf.Session()을 사용하여 세션 객체를 하나 만드세요.
sess = tf.Session()
임의의 샘플 데이터를 만들려고 합니다. 평균 0, 표준 편차 0.55 인 샘플 데이터 1000개를 만듭니다.
x_raw = tf.random_normal([...], mean=.., stddev=..)
x = sess.run(x_raw)
Step2:  위에서 x 축의 값을 만들었으니 이에 상응하는 y 축의 값을 만들려고 합니다. y 값은 0.1*x+0.3 을 만족하되 실제 데이터처럼 보이게 하려고 난수를 조금 섞어서 만듭니다. 여기서는 평균 0, 표준 편차 0.03 인 정규 분포 난수를 만듭니다.
y_raw = 0.1 * x + 0.3 + tf.random_normal([...], mean=.., stddev=..)
y = sess.run(y_raw)
Step3:  만든 샘플 데이터를 산점도로 나타내보겠습니다. plot 명령에 x, y 축의 값을 전달하고 산점도 표시는 원 모양 'o'으로 하고 테두리 선을 검은색으로 그리도록 하겠습니다.
plt.plot(x, y, 'o', markeredgecolor='k')
선형 회귀에서 사용할 두개의 변수 W 와 b 를 만들고 직선 방정식을 구성합니다.
W = tf.Variable(tf.zeros([.]))
b = ...(tf.zeros([.]))
y_hat = W * x + b
Step4:  회귀에서의 손실함수는 평균 제곱 오차(mean squared error)입니다. 텐서플로우에서 사용하는 오차 함수 tf.loss.mean_squared_error()를 사용하여 손실 함수를 위한 노드를 만듭니다. 이 함수에 전달할 매개변수는 정답 y와 예측한 값 y_hat 입니다.
loss = tf.losses.mean_squared_error(y, y_hat)
경사하강법은 텐서플로우 tf.train.GradientDescentOptimizer()에 구현되어 있습니다. 경사하강법 학습속도를 0.5로 주고 최적화 연산을 만듭니다.
optimizer = tf.train.GradientDescentOptimizer(0.5)
optimizer.minimize()함수에 손실 함수 객체를 넘겨주어 학습할 최종 객체를 생성합니다.
train = optimizer.minimize(loss)
Step5:  계산 그래프에 필요한 변수를 초기화합니다.
Step6:  sess.run() 메소드를 이용해 필요한 연산을 수행할 수 있습니다. 반드시 수행할 것은 train이고 화면 출력을 위해 W, b, loss 를 계산해서 값을 반환 받겠습니다.
_, w_, b_, c = sess.run([train, W, b, loss])
반환 받은 c 는 costs 리스트에 추가하여 나중에 손실함수 그래프를 그리겠습니다. w_, b_ 를 이용해 위 산점도에 직선이 어떻게 맞춰지는지 그림으로 표현합니다.
plt.plot(x, w_ * x + b_)
<ASSISTANT_TASK:>
Python Code:
import matplotlib.pyplot as plt
%matplotlib inline
Explanation: 그래프를 그리기 위해서 matplotlib을 임포트 합니다. %matplotlib inline은 새로운 창을 띄우지 않고 주피터 노트북 안에 이미지를 삽입하여 줍니다.
End of explanation
x_raw = ...
x = ...
Explanation: 텐서플로우를 tf 란 이름으로 임포트 하세요.
tf.Session()을 사용하여 세션 객체를 하나 만드세요.
sess = tf.Session()
임의의 샘플 데이터를 만들려고 합니다. 평균 0, 표준 편차 0.55 인 샘플 데이터 1000개를 만듭니다.
x_raw = tf.random_normal([...], mean=.., stddev=..)
x = sess.run(x_raw)
End of explanation
y_raw = ...
y = ...
Explanation: 위에서 x 축의 값을 만들었으니 이에 상응하는 y 축의 값을 만들려고 합니다. y 값은 0.1*x+0.3 을 만족하되 실제 데이터처럼 보이게 하려고 난수를 조금 섞어서 만듭니다. 여기서는 평균 0, 표준 편차 0.03 인 정규 분포 난수를 만듭니다.
y_raw = 0.1 * x + 0.3 + tf.random_normal([...], mean=.., stddev=..)
y = sess.run(y_raw)
End of explanation
W = ...
b = ...
y_hat = ...
Explanation: 만든 샘플 데이터를 산점도로 나타내보겠습니다. plot 명령에 x, y 축의 값을 전달하고 산점도 표시는 원 모양 'o'으로 하고 테두리 선을 검은색으로 그리도록 하겠습니다.
plt.plot(x, y, 'o', markeredgecolor='k')
선형 회귀에서 사용할 두개의 변수 W 와 b 를 만들고 직선 방정식을 구성합니다.
W = tf.Variable(tf.zeros([.]))
b = ...(tf.zeros([.]))
y_hat = W * x + b
End of explanation
loss = ...
optimizer = ...
train = ...
Explanation: 회귀에서의 손실함수는 평균 제곱 오차(mean squared error)입니다. 텐서플로우에서 사용하는 오차 함수 tf.loss.mean_squared_error()를 사용하여 손실 함수를 위한 노드를 만듭니다. 이 함수에 전달할 매개변수는 정답 y와 예측한 값 y_hat 입니다.
loss = tf.losses.mean_squared_error(y, y_hat)
경사하강법은 텐서플로우 tf.train.GradientDescentOptimizer()에 구현되어 있습니다. 경사하강법 학습속도를 0.5로 주고 최적화 연산을 만듭니다.
optimizer = tf.train.GradientDescentOptimizer(0.5)
optimizer.minimize()함수에 손실 함수 객체를 넘겨주어 학습할 최종 객체를 생성합니다.
train = optimizer.minimize(loss)
End of explanation
init = ...
sess.run(init)
Explanation: 계산 그래프에 필요한 변수를 초기화합니다.
End of explanation
costs = []
for step in range(10):
    
    _, w_, b_, c = ...
    
    costs.append(c)
    print(step, w_, b_, c)
    # 산포도 그리기
    plt.plot(x, y, 'o', markeredgecolor='k')
    
    # 직선 그리기
    plt.plot(...)
    
    # x, y 축 레이블링을 하고 각 축의 최대, 최소값 범위를 지정합니다.
    plt.xlabel('x')
    plt.xlim(-2,2)
    plt.ylim(0.1,0.6)
    plt.ylabel('y')
    plt.show()
Explanation: sess.run() 메소드를 이용해 필요한 연산을 수행할 수 있습니다. 반드시 수행할 것은 train이고 화면 출력을 위해 W, b, loss 를 계산해서 값을 반환 받겠습니다.
_, w_, b_, c = sess.run([train, W, b, loss])
반환 받은 c 는 costs 리스트에 추가하여 나중에 손실함수 그래프를 그리겠습니다. w_, b_ 를 이용해 위 산점도에 직선이 어떻게 맞춰지는지 그림으로 표현합니다.
plt.plot(x, w_ * x + b_)
End of explanation
<END_TASK>