Tensorflow相关笔记
Date: 2019/08/22 Categories: 工作 Tags: tensorflow
读取metagraph
tf.train.import_meta_graph('./chinese_L-12_H-768_A-12/bert_model.ckpt.meta')
列出placeholder
graph = tf.get_default_graph()
[(op.name, op) for op in graph.get_operations() if op.type == 'Placeholder']
给权重赋值
tensorflow中图由node连接而成, 每个node又叫op, 每个op有0或多个input, 0或多个output, 这些input和output都是tensor. op还可以有values, 比如全连接层有权重.
op输出用op_name:port_num
表示, 比如有一个op叫bert/embeddings/word_embeddings
,
它的第一个输出就是bert/embeddings/word_embeddings:0
,
op可以有values, 下面的代码演示了如何给op的权重赋值.
out0 = graph.get_tensor_by_name('bert/embeddings/word_embeddings:0') # 获得tensor
word_embeddings = graph.get_operation_by_name('bert/embeddings/word_embeddings')
assert word_embeddings.outputs[0] == out0 # 这两种方式等价
sess.run(tf.assign(word_embeddings.values()[0], np.ones([10000, 768]))) # 给权重赋值
sess.run(word_embeddings.values())[0] # 获取权重
Tensor和op
op有inputs和outputs, 它们是tensor, tensor有op表示输出这个tensor的op,
tensor还有consumers()
, 表示输入这个tensor的op
设置默认的graph和session
sess = tf.Session()
sess.__enter__()
graph = tf.Graph()
graph.as_default().__enter__()
在tensorflow中, graph类似函数定义, 而session包含了实际的数据, 比如tf.assign在一个session中执行, 另一个使用同一个图的session无法看到赋值的值