인공지능 - 텐서플로우2

Jamwon·2021년 5월 23일
0

TIL

목록 보기
2/8

텐서플로우 프로그램 예

변수와 플레이스 홀더

DFG에 대한 입력은 변수(variable)과 플레이스홀더(placeholder)를 통해서 한다.

변수

텐서플로우는 모델의 학습 가능한 변수를 정의할때 tf.Variable을 사용.
변수는 학습모델에서 사용하는 가중치, 편차항 등과 같은 파라미터를 저장하는데 사용.

변수는 정의할 때 반드시 초기화 하여야 한다!
ex) W = tf.Varible(tf.random_normal([4,1]), name = 'weight')
가중치를 다루는 변수의 정의 4행1열의 텐서를 정규분포에 따라서 난수를 생성해서 채워서 변수를 만든다. (weight이라는 이름으로)

플레이스홀더(placeholder)

DFG를 실행할 때 학습 데이터를 전달해주기 위해서 사용하는 일종의 변수. 나중에 입력될 데이터(즉 텐서)를 위한 자리를 차지하고 있는 역할을 한다.

초기화 없이 tf.placehkolder를 사용하여 정의되며 데이터 플로우 그래프를 실행할 때 placeholder에 값을 전달해 줘야한다.

session.run() 메소드에서 feed_dict를 사용하여 실제 값을 전달한다.

ex) x = tf.placeholder(tf.float32)
y = tf.placeholder(tf.float32)
z = tf.multiply(x,y)
sees.run(z, feed_dict ={x:4,y:4})
placeholder (비어있는 상태)에 x와 y에 3,4를 전달한다. -feed_dict가

다층 퍼셉트론(은닉층 1개)

입력층에는 784(28*28)개의 입력뉴런이 있고 은닉층에는 1024개의 뉴런 사용 출력층에는 10개의 뉴런이 필요(0~9) 소프트맥스 함수 사용

자세하게 이해할필요는 없다고 한다.

첫번째 셀 - 필요한 모듈들을 import
두번째 셀 - data set를 준비 28*28 픽셀의 손으로쓴 글씨 data
세번째 셀 - 1. 은닉층 뉴런의수 -num_units
2. 2차원 텐서로 행의수는 미정이고 열의 수는 784(픽셀수)
3. 가중치를 다루는 변수 - 입력층과 은닉층 사이 / 은닉층과 출력층 사이
2차원 배열로 가중치를 다룬다. truncated_normal -정규화 분포로 초기화ㅣ
4. 은닉층 뉴런들의 임계값 - 1차원 텐서로 0으로 초기화한다.
5. 은닉층에서의 출력하고 관련된 연산을 정의 -전달되는 픽셀값과 가중치를 이용해 가중합을 구해서 편차를 뺀뒤 활성화 함수를 이용해서 출력
x - 입력 사례 w1 - 입력층과 은닉층 사이의 가중치 2차원 행렬

relu - 활성화 함수로 정규 선형화 함수를 사용하였다.
6 - 은닉층과 출력층 사이의 가중치를 정의
7 - 출력층에 있는 임계값을 1차원 배열의 형태로 정의후 0으로 초기화
8 - 최종 출력층의 뉴런들의 연산을 기술 사례에 대해서 은닉층이 계산해서 출력한값.

  1. 사례들에 대한 목표출력을 저장하기 위한 placeholder 정의 행의수는 사례의 숫자에 따라 결정됨 열은 출력층 뉴런의 수인 10!
  2. loss 값을 최소화 하는 가중치를 찾는다. AdamOptimizer를 사용
    4,5 두개의 인자가 같은 값이면 (equal) - tf.argmax(p,1) p는 출력층에서 출력한 확률값 행단위로 최대값을 가지는 뉴런의 index tf.argmax(t,1) - 목표출력의 행단위 최대값 을 가지는 index
    이둘이 일치하는지 확인 - 값1을 출력해야될 뉴런과 가장 높은 확률을 제시한 뉴런이 같다면 true를 출력한다. -> 올바른 출력을 했는지 확인
    True에 대해서만 더해서 평균을 낸다. -> 정확도를 구하는 문장

6,7 - 세션을 준비 하고 변수를 초기화 한다.

8~ 반복문을 사용해 가중치를 찾는 과정을 지속한다. 여기선 2000번 반복해서 매번 100개의 사례를 가지고 와서 사례를 x에 넣고 t에는 목표출력을 넣어주고 loss 함수를 최소화 시켜주는 가중치를 찾는다.

2000번 하는 도중에 100번 할때 마다 그때의 가중치의 정확도와 loss값을 출력해준다.

이 셀은 앞에 구축한 신경망이 어떤 사례에서 잘못 분류하는지 어디서 잘 분류하는지 보여주는 셀이다 (자세한 설명은 생략하심)

화이팅~~!

profile
한걸음씩 위로 자유롭게

0개의 댓글