[인공지능]텐서플로 기본 문법
파이썬
모든 것이 객체
변수 -> 객체를 참조!
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개만 있어도 자동으로 확장한다.
Author And Source
이 문제에 관하여([인공지능]텐서플로 기본 문법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@shin75492/인공지능텐서플로-기본-문법저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)