Tensorlow 中文API:tf.zeros() tf.ones()tf.fill()tf.constant()

来源:互联网 发布:voc0712数据集 编辑:程序博客网 时间:2024/05/14 19:32

在程序中有一处不理解的地方 import basic.util.prints这个basic包找不到也搜不到,有知道的帮忙留言,谢谢

可以在下面使用print(data.eval())来输出结果


Tensors常量值函数
  • tf.zeros(shape, dtype=tf.float32, name=None)
  • tf.zeros_like(tensor, dtype=None, name=None)
  • tf.ones(shape, dtype=tf.float32, name=None)
  • tf.ones_like(tensor, dtype=None, name=None)
  • tf.fill(dims, value, name=None)
  • tf.constant(value, dtype=None, shape=None, name='Const')

在Tensorflow中,任何参数的运算和操作都需要转换成对应的TensorFlow数据类型,例如现实中的字符串类型是不能直接在TensorFlow中进行运算的,必须转换成对应的TensorFlow类型才行

故而Tensorflow提供了一些函数用于生成常量值.如上是一些基本的生成常量的方法.

tf.zeros(shape, dtype=tf.float32, name=None)

创建一个所有的参数为0的tensor对象

This operation returns a tensor of type dtype with shape shape and all elements set to zero.

这个操作会返回一个类型为dtype,并且维度为sharp的tensor,并且所有的参数均为0.

参数:
  • shape: 用于表示维度,通常为一个int32类型数组,或者一个一维(1-D)的tf.int32数字.注意不能直接使用数字
  • dtype: 所要创建的tensor对象的数据类型
  • name: 一个该操作的别名(可选的).
返回:

所有参数都为0的tensor对象

用例以及结果:

#coding=utf8import tensorflow as tfimport basic.util.prints as psess = tf.InteractiveSession()# 创建一个维度为1, 类型为int的对象data = tf.zeros([1], dtype=tf.int32)p.printValue("sess.zeros([1], dtype=tf.int32)", data)# 创建一个维度为3, 类型为int的对象data = tf.zeros([1,2,1], dtype=tf.int32)p.printValue("sess.zeros([3,4,5], dtype=tf.int32)", data)# doubledata = tf.zeros([8], dtype=tf.double)p.printValue("sess.zeros([1], dtype=tf.double)", data)# floatdata = tf.zeros([8], dtype=tf.float16)p.printValue("sess.zeros([1], dtype=tf.float16)", data)sess.close()
# sess.zeros([1], dtype=tf.int32) : Tensor("zeros:0", shape=(1,), dtype=int32) - [0]# sess.zeros([3,4,5], dtype=tf.int32) : Tensor("zeros_1:0", shape=(1, 2, 1), dtype=int32) - [[[0]  [0]]]# sess.zeros([1], dtype=tf.double) : Tensor("zeros_2:0", shape=(8,), dtype=float64) - [ 0.  0.  0.  0.  0.  0.  0.  0.]# sess.zeros([1], dtype=tf.float16) : Tensor("zeros_3:0", shape=(8,), dtype=float16) - [ 0.  0.  0.  0.  0.  0.  0.  0.]
另外,需要注意的是不能直接使用数字作为shape的参数,例如下面用例就会报错:
...# sharp不能为int类型,需要制定为tensor sharp类型data = tf.zeros(1, dtype=tf.int32)p.printValue("tf.zeros(1, dtype=tf.int32)", data)...
Traceback (most recent call last):  File "/services/git/GIthub/ml-example/tensorflow/basic/casting/string_to_number.py", line 20, in <module>    data = tf.zeros(1, dtype=tf.int32)  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/array_ops.py", line 623, in zeros    output = fill(shape, constant(0, dtype=dtype), name=name)  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/gen_array_ops.py", line 531, in fill    return _op_def_lib.apply_op("Fill", dims=dims, value=value, name=name)  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/op_def_library.py", line 655, in apply_op    op_def=op_def)  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/ops.py", line 2156, in create_op    set_shapes_for_outputs(ret)  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/ops.py", line 1612, in set_shapes_for_outputs    shapes = shape_func(op)  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/array_ops.py", line 1165, in _FillShape    dimensions_shape = op.inputs[0].get_shape().with_rank(1)  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/tensor_shape.py", line 625, in with_rank    raise ValueError("Shape %s must have rank %d" % (self, rank))ValueError: Shape () must have rank 1
这个时候可以通过如下两个方式解决
# 可是使用如下方法替换data = tf.zeros([1], dtype=tf.int32)p.printValue("tf.zeros([1], dtype=tf.int32)", data)

tf.zeros_like(tensor, dtype=None, name=None)

该方法用于创建一个所有参数均为0的tensor对象

给定一个tensor(tensor对象),该方法会返回一个类似当前参数类型以及维度的对象,但是所有参数的值均为0.当参数dtype选定了后,所有返回参数的类型也会变成选定的类型

该方法实际上为一个拷贝函数:默认情况下,它会拷贝参数tensor的类型,维度等数据,并将其中的值设置为0.当参数dtype设置后,那么拷贝后的tensor对象

参数:

  • tensor: tensor对象
  • dtype: 返回的tensor对象类型,不设置(为空时)时返回类型同参数tensor一致.该参数必须为如下tensorflow类型: float32, float64, int8, int16, int32, int64, uint8以及complex64.

  • name: 该操作别名 (可选).

返回:

所有参数为0的tensor对象

测试用例与结果如下:

#coding=utf8import tensorflow as tfimport basic.util.prints as psess = tf.InteractiveSession()# create a tensor objectoriginal = [[1,2,3],[4,5,6]]p.printRowValue("Original value", original)# 调用zeros_like,默认类型为intdata = tf.zeros_like(original)p.printValue("tf.zeros_like(original)", data)# 调用zeros_like,默认类型为doubledata = tf.zeros_like(original, dtype=tf.double)p.printValue("tf.zeros_like(original, dtype=tf.double)", data)# dtype类型为: float, int, double, uint以及complex(复数), 如下类型支持data = tf.zeros_like(original, dtype=tf.float16)data = tf.zeros_like(original, dtype=tf.float16_ref)data = tf.zeros_like(original, dtype=tf.float32)data = tf.zeros_like(original, dtype=tf.float32_ref)data = tf.zeros_like(original, dtype=tf.float64)data = tf.zeros_like(original, dtype=tf.float64_ref)data = tf.zeros_like(original, dtype=tf.int8)data = tf.zeros_like(original, dtype=tf.int8_ref)data = tf.zeros_like(original, dtype=tf.int16)data = tf.zeros_like(original, dtype=tf.int16_ref)data = tf.zeros_like(original, dtype=tf.int32)data = tf.zeros_like(original, dtype=tf.int32_ref)data = tf.zeros_like(original, dtype=tf.int64)data = tf.zeros_like(original, dtype=tf.int64_ref)data = tf.zeros_like(original, dtype=tf.uint8)data = tf.zeros_like(original, dtype=tf.uint8_ref)data = tf.zeros_like(original, dtype=tf.uint16)data = tf.zeros_like(original, dtype=tf.uint16_ref)data = tf.zeros_like(original, dtype=tf.double)data = tf.zeros_like(original, dtype=tf.double_ref)data = tf.zeros_like(original, dtype=tf.complex64)data = tf.zeros_like(original, dtype=tf.complex64_ref)data = tf.zeros_like(original, dtype=tf.complex128)data = tf.zeros_like(original, dtype=tf.complex128_ref)# [ERROR] 不支持类型包括: bfloat, qint, quint# data = tf.zeros_like(original, dtype=tf.bfloat16)# data = tf.zeros_like(original, dtype=tf.quint8)# data = tf.zeros_like(original, dtype=tf.qint16)# data = tf.zeros_like(original, dtype=tf.qint32)sess.close()
# Original value : [[1, 2, 3], [4, 5, 6]]# tf.zeros_like(original) : Tensor("zeros_like:0", shape=(2, 3), dtype=int32) - [[0 0 0] [0 0 0]]# tf.zeros_like(original, dtype=tf.double) : Tensor("zeros_like_1:0", shape=(2, 3), dtype=float64) - [[ 0.  0.  0.] [ 0.  0.  0.]]
该方法在参数复制并置0的时候非常有用

tf.ones(shape, dtype=tf.float32, name=None)

创建一个所有的参数为1的tensor对象

这个操作会返回一个类型为dtype,并且维度为sharp的tensor,并且所有的参数均为0.

参数:

  • shape: 用于表示维度,通常为一个int32类型数组,或者一个一维(1-D)的tf.int32数字.注意不能直接使用数字
  • dtype: 所要创建的tensor对象的数据类型
  • name: 一个该操作的别名(可选的).

返回:

所有参数都为1的tensor对象

用例以及结果:

#coding=utf8import tensorflow as tfimport basic.util.prints as psess = tf.InteractiveSession()# 创建一个维度为1, 类型为int的对象data = tf.ones([1], dtype=tf.int32)p.printValue("sess.ones([1], dtype=tf.int32)", data)# 创建一个维度为3, 类型为int的对象data = tf.ones([1,2,1], dtype=tf.int32)p.printValue("sess.ones([3,4,5], dtype=tf.int32)", data)# doubledata = tf.ones([8], dtype=tf.double)p.printValue("sess.ones([1], dtype=tf.double)", data)# floatdata = tf.ones([8], dtype=tf.float16)p.printValue("sess.ones([1], dtype=tf.float16)", data)# [ERROR] sharp不能为int类型,需要制定为tensor sharp类型# data = tf.ones(1, dtype=tf.int32)# p.printValue("tf.ones(1, dtype=tf.int32)", data)# 可是使用如下方法替换data = tf.ones([1], dtype=tf.int32)p.printValue("tf.ones([1], dtype=tf.int32)", data)sess.close()
执行返回结果
# sess.ones([1], dtype=tf.int32) : Tensor("ones:0", shape=(1,), dtype=int32) - [1]# sess.ones([3,4,5], dtype=tf.int32) : Tensor("ones_1:0", shape=(1, 2, 1), dtype=int32) - [[[1]  [1]]]# sess.ones([1], dtype=tf.double) : Tensor("ones_2:0", shape=(8,), dtype=float64) - [ 1.  1.  1.  1.  1.  1.  1.  1.]# sess.ones([1], dtype=tf.float16) : Tensor("ones_3:0", shape=(8,), dtype=float16) - 
[ 1.  1.  1.  1.  1.  1.  1.  1.]
# tf.ones([1], dtype=tf.int32) : Tensor("ones_4:0", shape=(1,), dtype=int32) - [1]

tf.ones_like(tensor, dtype=None, name=None)

该方法用于创建一个所有参数均为1的tensor对象

给定一个tensor(tensor对象),该方法会返回一个类似当前参数类型以及维度的对象,但是所有参数的值均为1.当参数dtype选定了后,所有返回参数的类型也会变成选定的类型

该方法实际上为一个拷贝函数:默认情况下,它会拷贝参数tensor的类型,维度等数据,并将其中的值设置为1.当参数dtype设置后,那么拷贝后的tensor对象

参数:

  • tensor: tensor对象
  • dtype: 返回的tensor对象类型,不设置(为空时)时返回类型同参数tensor一致.该参数必须为如下tensorflow类型: float32, float64, int8, int16, int32, int64, uint8以及complex64.

  • name: 该操作别名 (可选).

返回:

所有参数为1的tensor对象

测试用例与结果如下:

#coding=utf8import tensorflow as tfimport basic.util.prints as psess = tf.InteractiveSession()# create a tensor objectoriginal = [1,2,3,4,5]# original = tf.zeros([5], dtype=tf.float16)p.printRowValue("Original value", original)# 调用ones_like,默认类型为intdata = tf.ones_like(original)p.printValue("tf.ones_like(original)", data)# 调用ones_like,默认类型为doubledata = tf.ones_like(original, dtype=tf.double)p.printValue("tf.ones_like(original, dtype=tf.double)", data)# dtype类型为: float, int, double, uint以及complex(复数), 如下类型支持data = tf.ones_like(original, dtype=tf.float32)p.printValue("tf.ones_like(original, dtype=tf.float32)", data)data = tf.ones_like(original, dtype=tf.float32_ref)p.printValue("tf.ones_like(original, dtype=tf.float32_ref)", data)data = tf.ones_like(original, dtype=tf.float64)p.printValue("tf.ones_like(original, dtype=tf.float64)", data)data = tf.ones_like(original, dtype=tf.float64_ref)p.printValue("tf.ones_like(original, dtype=tf.float64_ref)", data)data = tf.ones_like(original, dtype=tf.int8)p.printValue("tf.ones_like(original, dtype=tf.int8)", data)data = tf.ones_like(original, dtype=tf.int8_ref)p.printValue("tf.ones_like(original, dtype=tf.int8_ref)", data)data = tf.ones_like(original, dtype=tf.int16)p.printValue("tf.ones_like(original, dtype=tf.int16)", data)data = tf.ones_like(original, dtype=tf.int16_ref)p.printValue("tf.ones_like(original, dtype=tf.int16_ref)", data)data = tf.ones_like(original, dtype=tf.int32)p.printValue("tf.ones_like(original, dtype=tf.int32)", data)data = tf.ones_like(original, dtype=tf.int32_ref)p.printValue("tf.ones_like(original, dtype=tf.int32_ref)", data)data = tf.ones_like(original, dtype=tf.int64)p.printValue("tf.ones_like(original, dtype=tf.int64)", data)data = tf.ones_like(original, dtype=tf.int64_ref)p.printValue("tf.ones_like(original, dtype=tf.int64_ref)", data)data = tf.ones_like(original, dtype=tf.uint8)p.printValue("tf.ones_like(original, dtype=tf.uint8)", data)data = tf.ones_like(original, dtype=tf.uint8_ref)p.printValue("tf.ones_like(original, dtype=tf.uint8_ref)", data)data = tf.ones_like(original, dtype=tf.double)p.printValue("tf.ones_like(original, dtype=tf.double)", data)data = tf.ones_like(original, dtype=tf.double_ref)p.printValue("tf.ones_like(original, dtype=tf.double_ref)", data)data = tf.ones_like(original, dtype=tf.complex64)p.printValue("tf.ones_like(original, dtype=tf.complex64)", data)data = tf.ones_like(original, dtype=tf.complex64_ref)p.printValue("tf.ones_like(original, dtype=tf.complex64_ref)", data)data = tf.ones_like(original, dtype=tf.complex128)p.printValue("tf.ones_like(original, dtype=tf.complex128)", data)data = tf.ones_like(original, dtype=tf.complex128_ref)p.printValue("tf.ones_like(original, dtype=tf.complex128_ref)", data)# 特殊情况data = tf.ones_like(original, dtype=tf.float16)# p.printValue("tf.ones_like(original, dtype=tf.float16)", data)data = tf.ones_like(original, dtype=tf.float16_ref)# p.printValue("tf.ones_like(original, dtype=tf.float16_ref)", data)data = tf.ones_like(original, dtype=tf.uint16)# p.printValue("tf.ones_like(original, dtype=tf.uint16)", data)data = tf.ones_like(original, dtype=tf.uint16_ref)# p.printValue("tf.ones_like(original, dtype=tf.uint16_ref)", data)# [ERROR] 不支持类型包括: bfloat, qint, quint# data = tf.ones_like(original, dtype=tf.bfloat16)# data = tf.ones_like(original, dtype=tf.quint8)# data = tf.ones_like(original, dtype=tf.qint16)# data = tf.ones_like(original, dtype=tf.qint32)sess.close()

运行结果:

# Original value : [1, 2, 3, 4, 5]# tf.ones_like(original) : Tensor("ones_like:0", shape=(5,), dtype=int32) - [1 1 1 1 1]# tf.ones_like(original, dtype=tf.double) : Tensor("ones_like_1:0", shape=(5,), dtype=float64) - [ 1.  1.  1.  1.  1.]# tf.ones_like(original, dtype=tf.float32) : Tensor("ones_like_2:0", shape=(5,), dtype=float32) - [ 1.  1.  1.  1.  1.]# tf.ones_like(original, dtype=tf.float32_ref) : Tensor("ones_like_3:0", shape=(5,), dtype=float32) - [ 1.  1.  1.  1.  1.]# tf.ones_like(original, dtype=tf.float64) : Tensor("ones_like_4:0", shape=(5,), dtype=float64) - [ 1.  1.  1.  1.  1.]# tf.ones_like(original, dtype=tf.float64_ref) : Tensor("ones_like_5:0", shape=(5,), dtype=float64) - [ 1.  1.  1.  1.  1.]# tf.ones_like(original, dtype=tf.int8) : Tensor("ones_like_6:0", shape=(5,), dtype=int8) - [1 1 1 1 1]# tf.ones_like(original, dtype=tf.int8_ref) : Tensor("ones_like_7:0", shape=(5,), dtype=int8) - [1 1 1 1 1]# tf.ones_like(original, dtype=tf.int16) : Tensor("ones_like_8:0", shape=(5,), dtype=int16) - [1 1 1 1 1]# tf.ones_like(original, dtype=tf.int16_ref) : Tensor("ones_like_9:0", shape=(5,), dtype=int16) - [1 1 1 1 1]# tf.ones_like(original, dtype=tf.int32) : Tensor("ones_like_10:0", shape=(5,), dtype=int32) - [1 1 1 1 1]# tf.ones_like(original, dtype=tf.int32_ref) : Tensor("ones_like_11:0", shape=(5,), dtype=int32) - [1 1 1 1 1]# tf.ones_like(original, dtype=tf.int64) : Tensor("ones_like_12:0", shape=(5,), dtype=int64) - [1 1 1 1 1]# tf.ones_like(original, dtype=tf.int64_ref) : Tensor("ones_like_13:0", shape=(5,), dtype=int64) - [1 1 1 1 1]# tf.ones_like(original, dtype=tf.uint8) : Tensor("ones_like_14:0", shape=(5,), dtype=uint8) - [1 1 1 1 1]# tf.ones_like(original, dtype=tf.uint8_ref) : Tensor("ones_like_15:0", shape=(5,), dtype=uint8) - [1 1 1 1 1]# tf.ones_like(original, dtype=tf.double) : Tensor("ones_like_16:0", shape=(5,), dtype=float64) - [ 1.  1.  1.  1.  1.]# tf.ones_like(original, dtype=tf.double_ref) : Tensor("ones_like_17:0", shape=(5,), dtype=float64) - [ 1.  1.  1.  1.  1.]# tf.ones_like(original, dtype=tf.complex64) : Tensor("ones_like_18:0", shape=(5,), dtype=complex64) - [ 1.+0.j  1.+0.j  1.+0.j  1.+0.j  1.+0.j]# tf.ones_like(original, dtype=tf.complex64_ref) : Tensor("ones_like_19:0", shape=(5,), dtype=complex64) - [ 1.+0.j  1.+0.j  1.+0.j  1.+0.j  1.+0.j]# tf.ones_like(original, dtype=tf.complex128) : Tensor("ones_like_20:0", shape=(5,), dtype=complex128) - [ 1.+0.j  1.+0.j  1.+0.j  1.+0.j  1.+0.j]# tf.ones_like(original, dtype=tf.complex128_ref) : Tensor("ones_like_21:0", shape=(5,), dtype=complex128) - [ 1.+0.j  1.+0.j  1.+0.j  1.+0.j  1.+0.j]


tf.fill(dims, value, name=None)

创建一个维度为dims,值为value的tensor对象.该操作会创建一个维度为dims的tensor对象,并将其值设置为value,该tensor对象中的值类型和value一致

    • 当value为0时,该方法等同于tf.zeros()
    • 当value为1时,该方法等同于tf.ones()
参数:
  • dims: 类型为int32的tensor对象,用于表示输出的维度(1-D, n-D),通常为一个int32数组,如:[1], [2,3]等
  • value: 常量值(字符串,数字等),该参数用于设置到最终返回的tensor对象值中
  • name: 当前操作别名(可选)
返回:

tensor对象,类型和value一致

测试用例如下:

#coding=utf8import tensorflow as tfimport basic.util.prints as psess = tf.InteractiveSession()dim = [2,3]data = tf.fill(dim, 5)p.printValue("tf.fill(dim, value)", data)data = tf.fill(dim, 5.0)p.printValue("tf.fill(dim, value)", data)data = tf.fill(dim, "5.0")p.printValue("tf.fill(dim, value)", data)sess.close()

运行返回如下:

# tf.fill(dim, value) : Tensor("Fill:0", shape=(2, 3), dtype=int32) - [[5 5 5] [5 5 5]]# tf.fill(dim, value) : Tensor("Fill_1:0", shape=(2, 3), dtype=float32) - [[ 5.  5.  5.] [ 5.  5.  5.]]# tf.fill(dim, value) : Tensor("Fill_2:0", shape=(2, 3), dtype=string) - [['5.0' '5.0' '5.0'] ['5.0' '5.0' '5.0']]

tf.constant(value,dtype=None,shape=None,name=’Const’) 

创建一个常量tensor,按照给出value来赋值,可以用shape来指定其形状。value可以是一个数,也可以是一个list。 如果是一个数,那么这个常亮中所有值的按该数来赋值。 如果是list,那么len(value)一定要小于等于shape展开后的长度。赋值时,先将value中的值逐个存入。不够的部分,则全部存入value的最后一个值。

a = tf.constant(2,shape=[2])b = tf.constant(2,shape=[2,2])c = tf.constant([1,2,3],shape=[6])d = tf.constant([1,2,3],shape=[3,2])sess = tf.InteractiveSession()print(sess.run(a))#[2 2]print(sess.run(b))#[[2 2]# [2 2]]print(sess.run(c))#[1 2 3 3 3 3]print(sess.run(d))#[[1 2]# [3 3]# [3 3]]



原创粉丝点击