인공지능 -텐서플로우

Jamwon·2021년 5월 22일
0

TIL

목록 보기
1/8

학교 인공지능 수업때 배운것 메모

텐서플로우

텐서플로우에서는 수행할 일련의 연상을 파이썬 코드로 기술하는데 이는 대부적으로 데이터 플로우 그래프로 표현

노드는 연상을 나타내고 노드 사이의 간선은 노드 사이에 전달되는 데이터를 나타내는데 이를 텐서라고 함 - 동적인 다차원 배열을 뜻함

데이터 플로우 그래프에 표현된 순서대로 텐서(데이터)가 간선을 따라 전달되면서 노드에서 처리되는 과정을 통해 최종 결과값이 계산된다. 텐서가 흘러가면서 처리되는 과정을 가지고있기때문에 텐서플로우라는 이름을 사용!!

우선 계산할 내용을 데이터 플로우 그래프로 기술한 다음 필요에 따라 그래프의 특정 부분을 실행하도록 요구하는 형태로 작성

DFG(data flow graph)는 세션안에서 실행. so 그래프를 실행하려면 세션객체를 먼저 생성해야 한다.
그래프가 주어지면 각 오퍼레이션들을 실행할 디바이스(cpu or gpu)로 전달.

텐서플로우 프로그램의 예


오른쪽 사진이 DFG 그래프는 tensorboard프로그램을 통해 확인가능
---연산정의를 node로 표현
2. a는 상수값2를 가지도록함
3. b는 상수값 3을 가지도록함
4. a와 b를 더한 값을 가지는 오퍼레이션 c를 정의
5. b와 c를 곱한 연산을 가지는 오퍼레이션 d를 정의

7 세션 객체 생성
8 노드c에대해서 계산해달라
9 결과 출력
10 세션 객체가 사용하던 자원 반환

텐서보드

프로그램에서 생성한 데이터 플로우 그래프를 보여주고, 학습과정의 각종 가중치 및 성능 변화를 시각화해서 보여주는 도구

tf.summary.FileWrite() 메소드를 사용해서 로그파일로 저장 --자세한 내용 생략

텐서

다차원 배열로서 텐서플로우의 '기본자료형'
rank, shape, type의 세가지 속성을 갖는다.

rank - 텐서의 차원수 rank가 n이면 텐서가 n차원의 배열
shape - 텐서의 구조를 나타낸다.
ex) shape[4]:[2,4,6,8] shape[2,3]:[[1,2,3,],[4,5,6]]

type - 텐서를 구성하는 원소의 자료형.

텐서 변환 연산

shpae(), size(), rank() 함수

reshape() - 원소는 유지하면서 텐서의 구조 변경 (잘 알아두자)
squeeze() - 텐서에서 크기가 1인차원을 삭제

[3,2,4] 에서 높이, 행 렬,

tf.reshape(a ,[3,8]) -a를 3행8렬의 2차원배열로 바꿔라

등등 여러 함수들이 있다.

텐서 산술 연산

add, subtract, multiply, abs, square

ex)

a =[[1,2,3,4,],[5,6,7,8]]
b= [[2,4,6,8],[-1,-2,-3,-4]] 
with tf.Session() as sess:
	print(sess.run(tf.add(a,b)))

이런식으로 사용가능

텐서 축약 연산

reduce_XXX() 함수는 텐서에 대해 주어진 기준에 따라 XXX를 수행하여 텐서의 크기를 줄이는 함수. 기준은 축이된다.
실행예시

1 - 기준을 열을 기준으로 가장큰값을 뽑아서 return
2 - 1이면 행을 단위로 각 행에서 최대값을 뽑아서 return
3 - 0이면 열을 기준으로 하기때문에 열 단위로 평균을 구해서 return
5 - 열을 기준으로 열 단위로 합을 구해서 return
7 - 열을 기준으로 최대값이 있는곳의 첨자값(index - 0부터 시작) 5,6,7,8 모두 1번째 위치 1,2,3,4보다 크기때문에 5,6,7,8의 index은 1 return

행렬 곱셈 함수와 텐서에서 유용하게 사용되는 여러 함수들

잘 기억해두자 !!

matmul(a,b) - 두개의 텐서에 대해서 행렬곱을 하는 함수 2x3 3x2 의 행을 곱하면 2x2 행렬이 된다.

cast(c, tf,int32) - c에 있는 원소들의 type을 변경시켜준다.

ones_like(a) - a의 있는 원소를 1로 채워라

zeros_like - 원소를 0으로 채워라

화이팅!

profile
한걸음씩 위로 자유롭게

0개의 댓글