tensorflow學習:第二課,tf.constant api的使用
在TensorFlow API中建立常量的函式原型如下所示:
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)
在TensorFlow API中建立常量的函式原型如下所示:
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)