TF编程方式很别扭

​ Tensorflow是个很好的机器学习的框架,他提供了很多必要函数库,既能够用很基础函数快速实现实验原型,又能用很工程化的方式开发一套比较像样的系统,并且TF能够高效的运行在分布式的计算集群上。

​ 但是他的编程方式很诡异,写了一大堆代码,都只是描述计算流程。

1
2
3
4
5
6
7
8
9
10
11
12
13
def build_graph():
features = tf.placeholder(shape=[None, None], dtype=tf.int32)
labels = tf.placeholder(tf.float32, [None, 10])
logits = tf.contrib.layers.fully_connected(features, output_size)
loss = tf.reduce_mean(
tf.nn.softmax_cross_entropy_with_logits(labels=labels, logits=logits))
train_op = tf.train.GradientDescentOptimizer(0.5).minimize(loss)
return features, labels, train_op
f, l, op = build_graph()
with tf.Session() as sess:
for _step in range(100):
sess.run(op, feed_dict={f:input_data['features'], l:input_data['labels']})

​ 函数build_graph()执行的内容,不是这里的计算内容,只是做了符号描述,要到sess.run()才真正执行计算。这里的session是tensorflow会把graph拷贝到gpu上,通过核心C++代码来执行的。这是我感觉很别扭的地方。因为之前编程都是,我写的代码就是在执行字面意思,而现在不是了,有部分代码只是在描述一件事情,他的实际逻辑执行要等到下一个阶段才执行。

​ 如果像tf-seq2seq那样,分层、模块化、可配置都做得非常好,但是计算逻辑就分散在各个文件中,又由于tf现在很多功能还是在contrib目录下,这样就会对理解代码增加很多难度。写代码也会变得不那么直观。