于17年2月16日在山景城举办的首次年度TensorFlow开发者峰会上,谷歌宣布TensorFlow 1.0正式发布。这代表着于2015年11月9日首次发布的TensorFlow经过一段时间的发展,已经相对稳定。接下来记录几处在升级后需要更新的改动:
1、tf.split函数:
该函数原来的调用参数为tf.split(split_dim, num_split, value),功能是将value表示的Tensor沿着split_dim定义的维度划分为num_split个数量的子Tensor。
例如:value是一个shape为[6, 8]的Tensor,进行tf.split(0, 3, value)调用,将返回三个子Tensor(s0, s1, s2),则tf.shape(s0)将返回[2, 8]。
TensorFlow 1.0中tf.split改变了参数的顺序,使用了不同的关键字接受参数。调用参数改为tf.split(value, num_or_size_splits, axis)。所以,对于原来的代码,只需要将第一个和第三个参数对调就可以了。
2、tf.concat函数:
该函数原来的调用参数为tf.concat(concat_dim, values, name),功能是将values表示的Tensors沿着concat_dim定义的维度进行连接。
例如:tensor0 = [[0, 1, 2], [3, 4, 5]], tensor1 = [[6, 7, 8], [9, 10, 11]],进行tf.concat(0, [tensor0, tensor1])调用,将返回[[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 10, 11]]。而tf.concat(1, [tensor0, tensor1])调用则返回[[0, 1, 2, 6, 7, 8], [3, 4, 5, 9, 10, 11]]。
TensorFlow 1.0中tf.concat也改变了参数的顺序,使用了不同的关键字接受参数。调用参数改为tf.concat(values, axis, name)。所以,对于原来的代码,只需要将第一个和第二个参数对调就可以了。
3、tf.all_variables、tf.initialize_all_variables函数:
tf.all_variables()调用改为tf.global_variables()调用
init = tf.initialize_all_variables()
sess.run(init)改为如下调用:
init = tf.global_variables_initializer()
sess.run(init)
4、tf.nn.sigmoid_cross_entropy_with_logits函数:
该函数原来的调用参数为tf.nn.sigmoid_cross_entropy_with_logits(logits, targets, name),功能是计算两个输入logits、targets的交叉熵。
TensorFlow 1.0中该函数的调用参数改为tf.nn.sigmoid_cross_entropy_with_logits(labels = None, logits = None, name),函数的参数需要显式地写labels = ...,logits = ...。
5、单机多GPU:
有
for i in xrange(FLAGS.num_gpus):
...
调用需改为:
with tf.variable_scope(tf.get_variable_scope()):
for i in xrange(FLAGS.num_gpus):
...
6、tf.mul、tf.sub、tf.neg和tf.div函数
tf.mul、tf.sub和tf.neg这三个函数不再使用,对应的功能分别交由tf.multiply、tf.subtract和tf.negative实现;除法函数tf.div交由tf.divide实现
7、tf.train.SummaryWriter和tf.train.SummaryWriterCache
tf.train.SummaryWriter和tf.train.SummaryWriterCache这两个函数对应的功能分别使用tf.summary.FileWriter和tf.summary.FileWriterCache实现