본문 바로가기
Development/for Machine Learning

TensorFlow 프로그래밍

by IMCOMKING 2016. 9. 13.

TensorFlow


# flags 사용: https://stackoverflow.com/questions/33703624/how-does-tf-app-run-work

flags로 지정된 변수들은, tf.app.run()을 이용해 실행할 경우 main.py 함수를 실행할 때 자동으로 커맨드 라인에 입력한 argument를 parsing하여 내부로 자동 전달해주는 역할을 한다.


"Runs the program with an optional 'main' function and 'argv' list."



The name 'conv_layer1/h_pool1' refers to an Operation, not a Tensor. Tensor names must be of the form "<op_name>:<output_index>".


아하.. 그냥 name만 쓰면 오퍼레이션이고, 뒤에 인덱스를 붙여줘야 오퍼레이션의 결과 tensor가 나오는구나!!


- sess.run(var)과 var.eval(sess)의 차이

sess.run() : 주어진 variable들의 값을 계산함. list나 dictionary로 주어진 variable도 계산함.

The fetches argument may be a single graph element, or an arbitrarily nested list, tuple, namedtuple, or dict containing graph elements at its leaves.


tf.Variable.eval(session=None) : In a session, computes and returns the value of this variable. This is not a graph construction method, it does not add ops to the graph. This convenience method requires a session where the graph containing this variable has been launched


var.eval(sess) == sess.run(var)은 서로 완전히 동일한 호출임.

다만 sess.run은 문법적으로 한번에 여러개의 var_list를 계산할 수가 있음. 딱 그차이.


## sess.run에서 feed_dict를 전달할 때, 해당 tensor 계산에 필요하지 않은 place_holder 는 None으로 전달해도 문제 없음. 즉 빈칸이어도 됨. ##



- Masking 함수 구현:

 def mask(self, seq_length, max_seq_length):
    return tf.map_fn(
        lambda x: tf.pad(tf.ones([x], dtype=tf.int32), [[0, max_seq_length - x]]),
        seq_length)

http://stackoverflow.com/questions/34128104/tensorflow-creating-mask-of-varied-lengths



- 여러 API

tf.abs : element에 절대값을 씌워서 리턴

tf.sign : element의 부호에 대해서 1, 0 , -1 로 부호를 알려줌


tf.clip_by_value : 이야.. 클리핑해주는데 짱인데

tf.one_hot : return one_hot tensor with given index using on/off value(1,0 is standard)

tf.group : grouping the given op_list as a one merged operation

tf.nn.add_bias

tf.div : element-wise division

tf.gather_nd : integer indexing with tensor

tf.variable.assign_add : add a value to this variable


tf.nn.dynamic_rnn : tensor input, tensor output --> variable length

tf.nn.rnn : tensor_list input, tensor_list output  --> static length

tf의 RNN에서 말하는 output은 activation이라고 봐야함, state는 hidden or cell state인듯


tf.pack, unpack : tf.split과 하는 기능은 동일한데, 무조건 1칸 단위 list로 처리함


- tf shape 확인

shape = input_x.get_shape().as_list()

Tensor.setshape() : None으로 된 dimension을 설정할 수 있음

tf.Variable.name : tensor name확인



-------------------------------------------------------------------



1) graph_def 에 value도 집어넣기

-> 제일 깔끔한데 방법을 모르겠음. vgg만드는부분 참조?


오호. tf.constant이용해서 값을 직접 받아오는듯


vgg나 inception은 그냥 아이에 constant만 받아와서 그걸로 연산 정의해서 graph_def를 write했음.

이방식은 구체적인 initalizer같은 정보를 빼버리고 저장해서 민감한정보없이 숫자만 전달하는 방식인듯?


나도 아이에 constant로만 그래프만들어서 전달하거나

assign을 따로 저장하고, 이걸 다시 가져오는 구현이 필요해보임.


2) import_graph_def 한다음, add_to_collection에 변수 집어넣고 saver로 로딩

-> saver가 variable리스트를 알지 못함. all_varialbes 만 가져오면 되는데 이걸 어케 가져올지 모르겠음


그래프에서 variable만 뽑을 수있으면 될것같음.


trainable_variable 리스트만 가져올수 있어도 해결될듯?


3) 오픈소스로 올려놓은 graph def + saver 방식 사용

-> 2번과 같은 원리인데, 이거는 왜 initailizer가 없다고 에러가뜨는지 모르겠음


4) saver_def를 로딩해서 saver를 생성

처음보는 에러가 뜸. saver가 로딩하는 operation에 텐서를 집어넣을수없다??

fetch argument u'save/restore_all' of u'save/restore_all' cannot be interpreted as a Tensor. ("The name 'save/restore_all' refers to an Operation not in the graph.")









'Development > for Machine Learning' 카테고리의 다른 글

Jupyter Notebook  (0) 2017.05.23
TensorFlow Extreme Performance Tuning  (0) 2017.01.20
빅데이터 플랫폼  (0) 2015.04.13
Practical Theano Tutorial  (0) 2015.03.11
Theano 사용법  (0) 2015.01.20

댓글