그냥 tensorflow 에서 숫자, 리스트 담는 곳임
행렬로 인풋 / w 값 저장 가능함 -> Node 값 계산이 쉽다
새로운 노드 만드는 식 : x1 w1 + x2 w2 + x3 * w3
행렬을 사용해 계산하면 숫자 여러개를 한꺼번에 계산 가능함
텐서로 행렬 표현하기
행렬로 연산하기
행렬의 곱셈을 하고 싶을 땐 tf.matmul() but 3차원 이상만 가능함!
뒤에서부터 해석
2개의 행, 3개의 열인 행렬을 두개 만들어주세요
0으로 가득 찬 tensor 만들때 사용하는 메서드
차원 지정이 가능함
몇 차원의 행렬인지 알고 싶을 때
(2,2) -> 2개의 자료가 있는 리스트가 두개 있다
(2,3) -> 3개의 자료가 있는 리스트가 두개 있다
y = ax + b
모르는 직선을 추정하는 식
a 와 b의 값을 찾는 게 목표
키 = 170
신발 = 260
신발 = 키*a + b
연관은 있을 것 같은데 어떤 식으로 연관이 있는 줄 모르기때문에 위와 같이 식을 세우는 것
텐서 플로우로 가중치 만드는 문법
a = tf.Variable(0.1) ##괄호 안은 초기값
b = tf.Variable(0.2)
좋은 결과가 나올때까지 변수를 학습시켜보려고함
경사하강법 이용
경사하강법 이용해서 가중치 자동 업데이트 해주는 고마운 도구
opt = tf.keras.optimizers.Adam(learning_rate=0.1)
opt.minimize(손실함수, var_list=[a,b])
learning_rate : 얼마만큼 한번에 w 변수들을 업데이트 할지 숫자 지정
러닝레이트의 조절에 따라 값이 달라지므로 결과가 잘 나오도록이 값을 잘 찾아주는 것도 매우 중요함
var_list=[a,b] : 여기서 a,b 는 경사하강법으로 업데이트할 weight variable 목록
손실함수 만드는 메서드 중 하나
여기서 손실값 = 실제값 - 예측값, 즉 오차
square은 제곱해주는 도구임
def 손실함수():
return tf.square(실제값-예측값)
최적값 나올때까지 opt.minimize 여러번 반복한다
opt = tf.keras.optimizers.Adam(learning_rate=0.1)
for i in range(300):
opt.minimize(손실함수, var_list=[a,b])
print(a.numpy(),b.numpy())
결과
실행할수록 값이 1.519... / 1.619...에 가까워짐
이건 포문 초기값
이건 후기값
구한 가중치를 만들어둔 예측함수에 대입해서 결과를 확인함
실제값과 굉장히 유사함을 확인
예측_y = train_x*a + b
손실함수 mean squared error 평균 제곱 오차 구하는 메소드
# 데이터가 리스트로 주어진 경우
train_x = [1,2,3,4,5,6,7]
train_y = [3,5,7,9,11,13,15]
a = tf.Variable(0.1)
b = tf.Variable(0.1)
def 손실함수():
예측_y = train_x*a + b
return tf.keras.losses.mse(train_y, 예측_y)
opt = tf.keras.optimizers.Adam(learning_rate=0.1)
for i in range(300):
opt.minimize(손실함수(train_x[i], train_y[i]), var_list=[a, b])
print(a.numpy(), b.numpy())
적당한 결과가 나올때까지 range 값을 조정하자
근데 이건 딥러닝이 아님
딥러닝은 뉴럴네트워크를 타고 생각의 과정을 거쳐서 결과를 도출해야함
딥러닝을 만ㄷ르고 싶으면 히든 레이어가 꼭 필요함
노드끼리도 연산을 해서 최종 예측값을 낸다