由于版本更新关系,从原来的tensorflow低版本到升级到tensorflow1.0以上时,发现有很多API函数变化是很正常的事情,大多碰到的如:
如其中tf.nn.rnn_cell命名空间中的很多函数都发生了命名空间的变化,如转移到了tf.contrib.rnn.core_rnn_cell。
但是在修改某个程序的时候,发现原来tensorflow.models.rnn.rnn_cell.linear这个函数,居然没有发生转移。即在tf.contrib.rnn.core_rnn_cell也没有找到。
这个暂时是无解。不过由于这个函数实现的简单的线性求和,因此可以手动在程序中进行修改。
def linear(input_, output_size, scope=None):
'''
Linear map: output[k] = sum_i(Matrix[k, i] * args[i] ) + Bias[k]
Args:
args: a tensor or a list of 2D, batch x n, Tensors.
output_size: int, second dimension of W[i].
scope: VariableScope for the created subgraph; defaults to "Linear".
Returns:
A 2D Tensor with shape [batch x output_size] equal to
sum_i(args[i] * W[i]), where W[i]s are newly created matrices.
Raises:
ValueError: if some of the arguments has unspecified or wrong shape.
'''
shape = input_.get_shape().as_list()
if len(shape) != 2:
raise ValueError("Linear is expecting 2D arguments: %s" % str(shape))
if not shape[1]:
raise ValueError("Linear expects shape[1] of arguments: %s" % str(shape))
input_size = shape[1]
# Now the computation.
with tf.variable_scope(scope or "SimpleLinear"):
matrix = tf.get_variable("Matrix", [output_size, input_size], dtype=input_.dtype)
bias_term = tf.get_variable("Bias", [output_size], dtype=input_.dtype)
return tf.matmul(input_, tf.transpose(matrix)) + bias_term
上述改动只是冰山一脚,tensorflow 1.0版本的改动非常大,特别是经常碰到在函数中需要将传入参数对调顺序的那种。
现将官网上提供的新变化附置如下:(以备不时这需。这部分直接引用了http://jiqizhixin.com/article/2126文章的总结。)
API 的重要更改