[인공지능]텐서플로 기본 문법

파이썬

모든 것이 객체
변수 -> 객체를 참조!

a = 1
type(a) -> int
type(1) -> int
=> a는 int 객체 1을 참조한다.

def create_new_image(size, color):
    Make_BM = []

    for i in range(0, size[0]*size[1]):
        Make_BM.append(color[0])
        Make_BM.append(color[1])
        Make_BM.append(color[2])

    return Make_BM

🚩Constant🚩

상수를 담는 텐서 객체
a = tf.constant(2)
변수 a가 상수 2를 참조하도록 한다.

type(a) -> class Tensor

✔벡터
a = tf.constant([1,2]

✔행렬
a = [ [1,1,1] , [1,1,1] ] #2X3

0번축, 1번축 이렇게 해석이 하는게 더 좋다!

✔shape체크
a = tf.constant(2)
a = tf.constant( (2. ) )

✔계산
x = [1]
a = tf.constant(x)
sess = tf.Session()
a_ = sess.run(a)

type(a_) -> numpy배열 객체

✔매번 run을 해야해?
=> tensor객체에서 사용할 수 있는 eval( ) 함수 사용 가능

sess = tf.InteractiveSession( )
a.eval( )
sess.close( ) → 사용하면 닫는거 꼭 잊지말자!

✔여러 개의 텐서를 리스트로 제시하면 실행 결과도 리스트
a = tf.constant(2)
b = tf.constant(2)
c = tf.constant(2)
values = sess.run([a,b,c]) -> 원소 하나 하나는 numpy

✔텐서 객체에 속성?
Tensor(name, shape, dtype)

객체니까 . 찍어서 확인가능!
a.name
a.shape
a.dtype

✔상수 만들 때 shape이나 dtype 지정 가능
a = tf.constant(1, shape = (2,2), dtype=tf.float32)

✔텐서 shape 확인
a = tf.constant([[1,2,3],[4,5,6]])
a.get_shape( ) -> TensorShape([디멘전(2), 디멘전(3)])

print(a.get_shape( )) -> (2,3)
a.get_shape( )[0] -> 2

✔실행마다 이름이 바뀌게된다
td = tf.constant(1, shape=(2,2), dtype=tf.float32) -> Const:0
td = tf.constant(1, shape=(2,2), dtype=tf.float32) -> Const:1

=>텐서를 새로 만들 때마다 이름이 바뀐다! = 텐서 객체가 새로 생성되기 때문에
=>이름을 직접 지정도 가능

✔객체 주소
a = 1
id(a) = x

a = 2
id(b) = y

=> id값이 다르다 = 1객체랑 2객체가 다르기 때문에 참조하는 주소도 달라짐

✔타입 캐스팅
a = tf.constant([1])
a = tf.cast(a, tf.float32)
=> 타입 변경 가능

✔데이터 생성관련 텐서플로우 텐서들
fill(shape, value)
zeros(shape)
zeros_like(tensor)
ones, ones_like
random_normal(shape, mean, stddev) -> 신경망 구성 시 많이 사용, 정규분포(종 모양)
trucated_normal -> 정규 분포, 양 끝 짤라내고 가운데서 값 취한다
random_uniform -> 시작~끝 사이에서 균등하게 값을 가져온다.
random.shuffle

a = tf.zeors((2,3))
sess.run(a)

✔constant텐서에 데이터 생성 텐서를 파라미터로는 줄 수 없음!
ta = tf.constant(tf.zeros(shape=(2,3))
=> constant텐서는 메모리에 항상 상주하기에 지속 사용하는 값만!

🚩Variable🚩

여기선 zeros, ones 사용이 가능!
데이터 타입 별도로 지정 안하면 디폴트가 float32

sess.run 바로 하면 애러 발생 -> 먼저 메모리 할당하고 초깃값 배정 필요

sess.run(a.initializer)
sess.run(a)

✔Variable텐서 다수인 경우
sess = tf.Session( )
init = tf.global_variables_initializer( )
sess.run(init)

✔정규분포 -> 신경망 가중치 초기화 시
tf.random_normal(shape, mean, stddev)
shape 필드는 튜플 타입을 요구함을 주의 -> 리스트나 (1, )

✔placeholder
사용자가 제공하는 데이터를 담는 센서, 딕셔너리 사용

x_data =1
x = tf.placeholder(dtype=tf.float32, shape=( ))
sess = tf.Session( )
vx = sess.run(x, feed_dict={x: x_data})
print(vx) -> 1

✔행렬의 내적 : 대응되는 값끼리 곱한 후 모두 더한다
벡터도 계산 가능

np.dot
np.matmul
-> 결과는 스칼라

n1=np.array([1,2,3])
n2=np.array([4,5,6])
n3=np.dot(n1, n2)

✔내적 계산 텐서플로우
벡터는 허용X

tf.multiply
tf.matmul

c1=tf.constant([1,2,3])
c2=tf.constant([4,5,6])
c3=tf.matmul(c1, c2)
=> 벡터라서 오류 발생

c1=tf.constant([[1,2,3]])
c2=tf.constant([[4,5,6]])
c3=tf.matmul(c1, tf.transpose(c2)) -> 1 by 3 이랑 3 x 1 으로
sess.run(c3)
-> [ [ 32 ] ]

✔2차원 행렬 결과를 스칼라로
a.squeeze( ) -> 원사가 1개인 차원을 없앤다

✔그래프
그래프 객체를 별도 생성하지 않아도 기본적으로 하나 만들어짐
g1 = tf.get_default_graph( )

만들고 싶으면 Graph( )

✔브로드캐스팅
a가 2 by 2 행렬
b도 2 by 2 행렬
c = a + b
sess.run(c)

b에 1 by 1 행렬이나 값이 1개만 있어도 자동으로 확장한다.

좋은 웹페이지 즐겨찾기