TensorFlow创建常量(tf.constant)详解

本文详细解析了在TensorFlow中使用tf.constant函数创建常量的方法。从基本语法到参数详解,包括数值、列表作为输入,数据类型指定,张量形状设定及验证,以及名称赋予。通过具体实例展示了不同参数设置下常量张量的表现。
tf.constant(
    value,
    dtype=None,
    shape=None,
    name='Const',
    verify_shape=False
)
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

可以看到第一个值value是必须的,可以是一个数值,也可以是一个列表。
如果是数值:

tensor=tf.constant(1)
 
  • 1

为查看结果必须创建一个会话,并用取值函数eval()来查看创建的tensor的值:

sess=tf.Session()
with sess.as_default():
    print('结果是:', tensor.eval())
 
  • 1
  • 2
  • 3
结果是:1
 
  • 1

而如果value是一个列表:

tensor=tf.constant([1, 2])
sess=tf.Session()
with sess.as_default():
    print('结果是:', tensor.eval())
 
  • 1
  • 2
  • 3
  • 4
结果是:[1 2]
 
  • 1

后面四个参数可写可不写,第二个参数表示数据类型,一般可以是tf.float32, tf.float64等:

tensor=tf.constant([1, 2], dtype=tf.float32)
sess=tf.Session()
with sess.as_default():
    print('结果是:', tensor.eval())
 
  • 1
  • 2
  • 3
  • 4
结果是: [1. 2.]
 
  • 1

注意到数据类型相比之前发生了改变,因为这次我们指定了数据类型为float32,所以不是1 2,而是1. 2.。

第三个参数表示张量的“形状”,即维数以及每一维的大小。如果指定了第三个参数,当第一个参数value是数字时,张量的所有元素都会用该数字填充:

tensor=tf.constant(-1, shape=[2, 3])
sess=tf.Session()
with sess.as_default():
    print('结果是:', tensor.eval())
 
  • 1
  • 2
  • 3
  • 4
结果是: [[-1 -1 -1]
         [-1 -1 -1]]
 
  • 1
  • 2

可以看到是一个二维张量,第一维大小为2, 第二维大小为3,全用数字-1填充。

而当第一个参数value是一个列表时,注意列表的长度必须小于等于第三个参数shape的大小(即各维大小的乘积),否则会报错:

tensor=tf.constant([1, 2, 3, 4, 5, 6, 7], shape=[2, 3])
 
  • 1
Traceback (most recent call last):
  File "<pyshell#68>", line 1, in <module>
    tensor=tf.constant([1, 2, 3, 4, 5, 6, 7], shape=[2, 3])
ValueError: Too many elements provided. Needed at most 6, but received 7
 
  • 1
  • 2
  • 3
  • 4

这是因为函数会生成一个shape大小的张量,然后用value这个列表中的值一一填充shape中的元素。这里列表大小为7,而shape大小为2*3=6,无法正确填充,所以发生了错误。
而如果列表大小小于shape大小,则会用列表的最后一项元素填充剩余的张量元素:

tensor=tf.constant([1, 2], shape=[1, 4, 3])
sess=tf.Session()
with sess.as_default():
    print('结果是:', tensor.eval())
 
  • 1
  • 2
  • 3
  • 4
结果是: [[[1 2 2]
          [2 2 2]
          [2 2 2]
          [2 2 2]]]
 
  • 1
  • 2
  • 3
  • 4

第四个参数name可以是任何内容,主要是字符串就行。
不输入任何内容时:

tensor=tf.constant([1, 2])
print(tensor)
 
  • 1
  • 2
Tensor("Const_16:0", shape=(2,), dtype=int32)
 
  • 1

作为对比:

tensor=tf.constant([1, 2], name="jiayu")
print(tensor)
 
  • 1
  • 2
Tensor("jiayu_1:0", shape=(2,), dtype=int32)
 
  • 1

第五个参数verify_shape默认为False,如果修改为True的话表示检查value的形状与shape是否相符,如果不符会报错。

tensor=tf.constant([[1, 2, 3], [4, 5, 6]], shape=[2, 3], verify_shape=True)
 
  • 1

以上代码value与shape都是两行三列,检查结果正确。而下面的代码会报错:

tensor=tf.constant([1, 2], shape=[3, 2], verify_shape=True)
 
  • 1
            <link href="https://csdnimg.cn/release/phoenix/mdeditor/markdown_views-e44c3c0e64.css" rel="stylesheet">
                </div>
</article>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值