Tensorflow2016. 10. 19. 00:29


안녕하세요

이번에는 변수에 대해서 알아보도록 하겠습니다.



1.변수 생성


Tensorflow에서는 Variable() 이라는 생성자를 사용해서 변수를 생성할 수 있습니다.

이 변수는 생성되는 순간에 데이터의 타입과 크기가 결정이 됩니다.


아래와 같이 2.0의 실수 값을 생성하고 그 즉시 print를 해보면 object의 형태로만 보여지고 값이 출력이 되지 않습니다.


또, 이 변수들은 상수와는 다르게 특별히 초기화를 해주어야 합니다.

tf.initialize_all_variables() 라는 op을 이용해서 위에 정의된 모든 변수들을 초기화하며 이를 수행하지 않고 실행을 하면 에러가 발생하게 됩니다.


그리고 이렇게 초기화된 변수들은 session에서 한번 실행을 해주어야 실제로 사용이 가능해지고,

sess.run(x)를 통해서 x 값을 출력하면 정상적으로 2.0의 값이 출력이 되는 것을 볼 수 있습니다.


import tensorflow as tf

x = tf.Variable( 2. )
print(x)

init_op = tf.initialize_all_variables()

sess = tf.Session()
sess.run(init_op)
print(sess.run(x))

> <tensorflow.python.ops.variables.Variable object at 0x7fa6676d0d50>

> 2.0



2. 변수 초기화


이렇게 생성된 변수 x는 연산과 같은 op에서 자유롭게 사용이 가능하며 또는, 또 다른 변수 y를 초기화 하는데 사용이 될 수도 있습니다.


아래와 같이 y 변수를 생성할 때 x의 값을 사용해서 초기값을 셋팅하는 것이 가능합니다. x.initialized_value()


import tensorflow as tf

x = tf.Variable( 2. )
y = tf.Variable(x.initialized_value() + 3.)

init_op = tf.initialize_all_variables()

sess = tf.Session()
sess.run(init_op)
print(sess.run(y))

> 5.0



3. 랜덤 데이터 생성


x 변수를 784 x 200 Matrix로 생성을 해보겠습니다. tf.random_normal()을 이용해서 한번에 쉽게 랜덤한 데이터를 만들어 낼 수 있습니다.


y 를 출력하면 아래 결과와 같이 실수형 데이터들이 보여집니다. 너무 많아서 ... 으로 축약되어 보여지네요

784개의 행과 200개의 열의 데이터가 생성이 되었습니다.


마지막에 y.get_shape()를 통해서 y 변수가 가지고 있는 크기 정보를 확인할 수도 있습니다.

import tensorflow as tf

x = tf.Variable(tf.random_normal([784, 200], stddev=0.35))
y = tf.Variable(x.initialized_value() + 3.)

init_op = tf.initialize_all_variables()

sess = tf.Session()
sess.run(init_op)
print(sess.run(y))
print(y.get_shape())

> [[ 3.02768564  3.12597466  2.52994156 ...,  3.08230495  2.91772604

   3.7224791 ]

 [ 3.2493639   3.8909955   2.63857961 ...,  3.07862258  2.58424544

   3.00868273]

 [ 3.27517128  3.07848358  2.64484692 ...,  2.46941996  4.09747887

   2.73206043]

 ..., 

 [ 3.03197098  3.48627377  3.41118765 ...,  2.15849185  3.02953553

   3.33804893]

 [ 3.68876958  2.74948573  3.08964419 ...,  2.69333315  3.03848982

   3.31442404]

 [ 2.91405964  2.7167685   2.59313202 ...,  3.64224887  2.87397122

   3.16949797]]

> (784, 200)



4. 데이터 파일로 저장


이렇게 생성되고 사용되어진 변수들은 파일로 저장하거나 불러와서 재사용할 수도 있습니다.

Tensorflow에서는 이러한 기능을 saver 라는 op을 통해서 제공하고 있습니다.


아래와 같이 tf.train.Saver() op을 통해서 /tmp/model.ckpt 파일로 저장을 하면 됩니다.

실제 서버로 ftp나 ssh으로 접속해서 tmp 폴더 아래에 해당 파일이 생성이 되었는지 확인을 해보면 정상적으로 파일을 볼 수 있습니다.


import tensorflow as tf

x = tf.Variable(tf.random_normal([784, 200], stddev=0.35))
y = tf.Variable(x.initialized_value() + 3.)

init_op = tf.initialize_all_variables()

saver = tf.train.Saver()

sess = tf.Session()
sess.run(init_op)
save_path = saver.save(sess, "/tmp/model.ckpt")



5. 파일로 부터 데이터 로드


그럼 이번에는 저장된 파일로 부터 데이터를 다시 불러오는 것을 해보겠습니다.

동일하게 tf.train.Saver()를 이용해서 restore를 하면 위에서 저장했던 파일로 부터 데이터를 불러와 다시 사용할 수 있습니다.


출력을 해보면 랜덤이 아닌 저장할 때의 동일한 데이터 값이 계속 출력되는 것을 확인할 수 있습니다.


import tensorflow as tf

x = tf.Variable(tf.random_normal([784, 200], stddev=0.35))
y = tf.Variable(x.initialized_value() + 3.)

init_op = tf.initialize_all_variables()

saver = tf.train.Saver()

sess = tf.Session()
sess.run(init_op)
saver.restore(sess, "/tmp/model.ckpt")
print(sess.run(x))

>[[-0.00422456  0.0978028   0.31975791 ...,  0.1045675   0.16592446

   0.20451532]

 [-0.39301658 -0.2137443   0.16733795 ..., -0.10631239 -0.1307248  -0.399003  ]

 [ 0.26005134  0.40481696 -0.09874729 ...,  0.07433771  0.56824595

  -0.32252845]

 ..., 

 [ 0.42993194 -0.01891601  0.11422288 ..., -0.17722437  0.13874942

  -0.26585674]

 [ 0.29745746 -0.63581216  0.74154449 ..., -0.21865241 -0.2302119

  -0.11292892]

 [ 0.00222778  0.0909359   0.06996936 ..., -0.33092076 -0.35708269

  -0.27993494]]


Posted by 대소니

댓글을 달아 주세요