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 |
댓글