Constant Value Tensors zeros Quelque chose comme les zéros de numpy Spécifier le type de données et la forme de Tensor
import tensorflow as tf
x = tf.zeros([1], dtype=tf.float32)
with tf.Session() as sess:
print(x.eval())
[ 0.]
import tensorflow as tf
x = tf.zeros([10], dtype=tf.float32)
with tf.Session() as sess:
print(x.eval())
[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
Exemple de 2x10 Tensor
import tensorflow as tf
x = tf.zeros([2,10], dtype=tf.float32)
with tf.Session() as sess:
print(x.eval())
[[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]]
ones Quelque chose comme ceux dans numpy Spécifier le type de données et la forme de Tensor
import tensorflow as tf
x = tf.ones([2,10], dtype=tf.float32)
with tf.Session() as sess:
print(x.eval())
[[ 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]
[ 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]]
fill Faire un Tenseur constant dtype ne peut pas être spécifié
import tensorflow as tf
x = tf.fill([2,10], 9.)
with tf.Session() as sess:
print(x.eval())
[[ 9. 9. 9. 9. 9. 9. 9. 9. 9. 9.]
[ 9. 9. 9. 9. 9. 9. 9. 9. 9. 9.]]
constant Faire un Tenseur constant
import tensorflow as tf
x = tf.constant(9,shape=[2,10],dtype=tf.float32)
with tf.Session() as sess:
print(x.eval())
[[ 9. 9. 9. 9. 9. 9. 9. 9. 9. 9.]
[ 9. 9. 9. 9. 9. 9. 9. 9. 9. 9.]]
In [8]: x = tf.constant(9,shape=[2,10],dtype=tf.int32)
...: with tf.Session() as sess:
...: print(x.eval())
...:
...:
[[9 9 9 9 9 9 9 9 9 9]
[9 9 9 9 9 9 9 9 9 9]]
import tensorflow as tf
import numpy as np
x = tf.constant(np.arange(20).astype(float),shape=[2,10],dtype=tf.float32)
with tf.Session() as sess:
print(x.eval())
[[ 0. 1. 2. 3. 4. 5. 6. 7. 8. 9.]
[ 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.]]
Random Tensors Initialisez Tensor avec une valeur aléatoire. Souvent utilisé pour l'initialisation du poids
random_normal Initialiser Tensor avec une valeur aléatoire normalement distribuée
import tensorflow as tf
x = tf.random_normal(shape=[20000],mean=0.0, stddev=1.0,dtype=tf.float32)
with tf.Session() as sess:
y = x.eval()
truncated_normal Initialisez Tensor avec une distribution normale et des valeurs aléatoires jusqu'à deux fois l'écart type
import tensorflow as tf
x = tf.truncated_normal(shape=[20000],mean=0.0, stddev=1.0,dtype=tf.float32)
with tf.Session() as sess:
y = x.eval()
random_uniform Initialiser Tensor avec une valeur aléatoire uniformément distribuée
import tensorflow as tf
x = tf.random_uniform(shape=[20000], minval=-1.0,maxval=1.0,dtype=tf.float32)
with tf.Session() as sess:
y = x.eval()
set_random_seed Si vous utilisez aléatoire, la reproductibilité sera perdue, mais si vous spécifiez la valeur de départ, vous pouvez récupérer la même valeur. Il existe deux façons de le spécifier, soit en le spécifiant en opération, soit en le spécifiant au niveau du graphe avec set_random_seed.
import tensorflow as tf
a = tf.random_uniform([1])
print('session1')
with tf.Session() as sess:
print(a.eval())
print(a.eval())
print('session2')
with tf.Session() as sess:
print(a.eval())
print(a.eval())
session1
[ 0.85636878]
[ 0.81764412]
session2
[ 0.36246026]
[ 0.87940264]
import tensorflow as tf
a = tf.random_uniform([1],seed=1234)
print('session1')
with tf.Session() as sess:
print(a.eval())
print(a.eval())
print('session2')
with tf.Session() as sess:
print(a.eval())
print(a.eval())
session1
[ 0.84830701]
[ 0.64822805]
session2
[ 0.84830701]
[ 0.64822805]
import tensorflow as tf
tf.set_random_seed(1234)
a = tf.random_uniform([1])
b = tf.random_uniform([1])
print('session1')
with tf.Session() as sess:
print(a.eval())
print(a.eval())
print(b.eval())
print(b.eval())
print('session2')
with tf.Session() as sess:
print(a.eval())
print(a.eval())
print(b.eval())
print(b.eval())
session1
[ 0.340114]
[ 0.65625393]
[ 0.78275204]
[ 0.14843035]
session2
[ 0.340114]
[ 0.65625393]
[ 0.78275204]
[ 0.14843035]
Shapes and Shaping Shape Retirez la taille (Sharp) de Tensor.
import tensorflow as tf
x = tf.constant(np.arange(60.),shape=[3,4,5],dtype=tf.float32)
with tf.Session() as sess:
print(x.eval())
[[[ 0. 1. 2. 3. 4.]
[ 5. 6. 7. 8. 9.]
[ 10. 11. 12. 13. 14.]
[ 15. 16. 17. 18. 19.]]
[[ 20. 21. 22. 23. 24.]
[ 25. 26. 27. 28. 29.]
[ 30. 31. 32. 33. 34.]
[ 35. 36. 37. 38. 39.]]
[[ 40. 41. 42. 43. 44.]
[ 45. 46. 47. 48. 49.]
[ 50. 51. 52. 53. 54.]
[ 55. 56. 57. 58. 59.]]]
Lors de l'obtention de la taille avec get_shape () Le type est TensorShape.
import tensorflow as tf
s = x.get_shape()
print(type(s))
print(s)
<class 'tensorflow.python.framework.tensor_shape.TensorShape'>
(3, 4, 5)
Lors de l'obtention de la taille avec tf.shape () Le type est l'opération.
import tensorflow as tf
s = tf.shape(x)
print(type(s))
print(s)
<class 'tensorflow.python.framework.ops.Tensor'>
Tensor("Shape:0", shape=(3,), dtype=int32)
get_shape(), tf.shape() tf.shape () est utilisé lorsque la taille est décidée ultérieurement par un espace réservé, etc.
x = tf.placeholder(tf.float32, shape=[None,32])
Par exemple, si vous utilisez get_shape pour créer un Tensor de la même taille que l'espace réservé, une erreur se produira.
y = tf.ones(shape=x.get_shape())
Traceback (most recent call last):
File "<ipython-input-23-366d94fbb0a4>", line 1, in <module>
y = tf.ones(shape=x.get_shape())
File "/home/user/anaconda2/envs/tensorflow/lib/python2.7/site-packages/tensorflow/python/ops/array_ops.py", line 699, in ones
shape = ops.convert_to_tensor(shape, name="shape")
File "/home/user/anaconda2/envs/tensorflow/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", line 529, in convert_to_tensor
ret = conversion_func(value, dtype=dtype, name=name, as_ref=as_ref)
File "/home/user/anaconda2/envs/tensorflow/lib/python2.7/site-packages/tensorflow/python/ops/constant_op.py", line 195, in _tensor_shape_tensor_conversion_function
"Cannot convert a partially known TensorShape to a Tensor: %s" % s)
ValueError: Cannot convert a partially known TensorShape to a Tensor: (?, 32)
Dans ce cas, utilisez tf.shape.
y = tf.ones(shape=tf.shape(x))
import tensorflow as tf
x = tf.placeholder(tf.float32, shape=[None,32])
y = tf.ones(shape=tf.shape(x))
z = y + x
with tf.Session() as sess:
# sess.run(y)
b = np.arange(3*32).reshape((3,32))
print(sess.run(z, feed_dict={x:b}))
[[ 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28.
29. 30. 31. 32.]
[ 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46.
47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60.
61. 62. 63. 64.]
[ 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78.
79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92.
93. 94. 95. 96.]]
Si vous utilisez une partie de tf.shape et que vous l'entourez entre [] comme ceci, cela devient une liste.
print(type([tf.shape(x)[0],1]))
<class 'list'>
~~ Dans ce cas, utilisez tf.pack pour l'opération. ~~ Dans ce cas, utilisez tf.stack pour l'opération. (Le pack semble être une pile)
print(type(tf.stack([tf.shape(x)[0],1])))
<class 'tensorflow.python.framework.ops.Tensor'>
Slicing and Joining
slice Sortez une partie de Tensor. Spécifiez l'emplacement de départ avec le début et la taille à découper avec la taille.
import tensorflow as tf
n = np.arange(25).reshape((1,5,5))
x = tf.concat([n, n*10, n*100],0)
with tf.Session() as sess:
print(x.eval())
[[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[ 10 11 12 13 14]
[ 15 16 17 18 19]
[ 20 21 22 23 24]]
[[ 0 10 20 30 40]
[ 50 60 70 80 90]
[ 100 110 120 130 140]
[ 150 160 170 180 190]
[ 200 210 220 230 240]]
[[ 0 100 200 300 400]
[ 500 600 700 800 900]
[1000 1100 1200 1300 1400]
[1500 1600 1700 1800 1900]
[2000 2100 2200 2300 2400]]]
Dans l'exemple ci-dessous, quatre pièces sont retirées de la position 6 dans la direction 0 dimension, 3 dans la direction unidimensionnelle et 2 dans la direction tridimensionnelle.
import tensorflow as tf
y = tf.slice(x, [0,1,1], [3,2,4])
with tf.Session() as sess:
print(y.eval())
[[[ 6 7 8 9]
[ 11 12 13 14]]
[[ 60 70 80 90]
[ 110 120 130 140]]
[[ 600 700 800 900]
[1100 1200 1300 1400]]]
concat Combinez Tensor.
import tensorflow as tf
x = tf.ones([3,4], dtype=tf.float32)
y = tf.constant(2,shape=[3,4], dtype=tf.float32)
with tf.Session() as sess:
print(x.eval())
print(y.eval())
[[ 1. 1. 1. 1.]
[ 1. 1. 1. 1.]
[ 1. 1. 1. 1.]]
[[ 2. 2. 2. 2.]
[ 2. 2. 2. 2.]
[ 2. 2. 2. 2.]]
~~ Premier argument ~~ Déterminez la dimension à combiner avec le deuxième argument. Dans un Tensor bidimensionnel, lorsque Dimension vaut 0, le résultat est un Tensor dans l'ordre de [[xxxx], [xxxx], [yyyy], [yyyy] ...] comme z1. Lorsque Dimension est 1, le résultat est un Tenseur dans l'ordre de [[xxxxyyyy], [xxxxyyyy], ...] comme z2.
import tensorflow as tf
z1 = tf.concat([x, y],0)
z2 = tf.concat([x, y],1)
with tf.Session() as sess:
print('z1')
print(z1.eval())
print('z2')
print(z2.eval())
z1
[[ 1. 1. 1. 1.]
[ 1. 1. 1. 1.]
[ 1. 1. 1. 1.]
[ 2. 2. 2. 2.]
[ 2. 2. 2. 2.]
[ 2. 2. 2. 2.]]
z2
[[ 1. 1. 1. 1. 2. 2. 2. 2.]
[ 1. 1. 1. 1. 2. 2. 2. 2.]
[ 1. 1. 1. 1. 2. 2. 2. 2.]]
import tensorflow as tf
x = tf.ones([3,4,5], dtype=tf.float32)
y = tf.constant(2,shape=[3,4,5], dtype=tf.float32)
with tf.Session() as sess:
print(x.eval())
print(y.eval())
[[[ 1. 1. 1. 1. 1.]
[ 1. 1. 1. 1. 1.]
[ 1. 1. 1. 1. 1.]
[ 1. 1. 1. 1. 1.]]
[[ 1. 1. 1. 1. 1.]
[ 1. 1. 1. 1. 1.]
[ 1. 1. 1. 1. 1.]
[ 1. 1. 1. 1. 1.]]
[[ 1. 1. 1. 1. 1.]
[ 1. 1. 1. 1. 1.]
[ 1. 1. 1. 1. 1.]
[ 1. 1. 1. 1. 1.]]]
[[[ 2. 2. 2. 2. 2.]
[ 2. 2. 2. 2. 2.]
[ 2. 2. 2. 2. 2.]
[ 2. 2. 2. 2. 2.]]
[[ 2. 2. 2. 2. 2.]
[ 2. 2. 2. 2. 2.]
[ 2. 2. 2. 2. 2.]
[ 2. 2. 2. 2. 2.]]
[[ 2. 2. 2. 2. 2.]
[ 2. 2. 2. 2. 2.]
[ 2. 2. 2. 2. 2.]
[ 2. 2. 2. 2. 2.]]]
import tensorflow as tf
z1 = tf.concat([x, y],0)
z2 = tf.concat([x, y],1)
z3 = tf.concat([x, y],2)
with tf.Session() as sess:
print('z1')
print(z1.eval())
print('z2')
print(z2.eval())
print('z3')
print(z3.eval())
z1
[[[ 1. 1. 1. 1. 1.]
[ 1. 1. 1. 1. 1.]
[ 1. 1. 1. 1. 1.]
[ 1. 1. 1. 1. 1.]]
[[ 1. 1. 1. 1. 1.]
[ 1. 1. 1. 1. 1.]
[ 1. 1. 1. 1. 1.]
[ 1. 1. 1. 1. 1.]]
[[ 1. 1. 1. 1. 1.]
[ 1. 1. 1. 1. 1.]
[ 1. 1. 1. 1. 1.]
[ 1. 1. 1. 1. 1.]]
[[ 2. 2. 2. 2. 2.]
[ 2. 2. 2. 2. 2.]
[ 2. 2. 2. 2. 2.]
[ 2. 2. 2. 2. 2.]]
[[ 2. 2. 2. 2. 2.]
[ 2. 2. 2. 2. 2.]
[ 2. 2. 2. 2. 2.]
[ 2. 2. 2. 2. 2.]]
[[ 2. 2. 2. 2. 2.]
[ 2. 2. 2. 2. 2.]
[ 2. 2. 2. 2. 2.]
[ 2. 2. 2. 2. 2.]]]
z2
[[[ 1. 1. 1. 1. 1.]
[ 1. 1. 1. 1. 1.]
[ 1. 1. 1. 1. 1.]
[ 1. 1. 1. 1. 1.]
[ 2. 2. 2. 2. 2.]
[ 2. 2. 2. 2. 2.]
[ 2. 2. 2. 2. 2.]
[ 2. 2. 2. 2. 2.]]
[[ 1. 1. 1. 1. 1.]
[ 1. 1. 1. 1. 1.]
[ 1. 1. 1. 1. 1.]
[ 1. 1. 1. 1. 1.]
[ 2. 2. 2. 2. 2.]
[ 2. 2. 2. 2. 2.]
[ 2. 2. 2. 2. 2.]
[ 2. 2. 2. 2. 2.]]
[[ 1. 1. 1. 1. 1.]
[ 1. 1. 1. 1. 1.]
[ 1. 1. 1. 1. 1.]
[ 1. 1. 1. 1. 1.]
[ 2. 2. 2. 2. 2.]
[ 2. 2. 2. 2. 2.]
[ 2. 2. 2. 2. 2.]
[ 2. 2. 2. 2. 2.]]]
z3
[[[ 1. 1. 1. 1. 1. 2. 2. 2. 2. 2.]
[ 1. 1. 1. 1. 1. 2. 2. 2. 2. 2.]
[ 1. 1. 1. 1. 1. 2. 2. 2. 2. 2.]
[ 1. 1. 1. 1. 1. 2. 2. 2. 2. 2.]]
[[ 1. 1. 1. 1. 1. 2. 2. 2. 2. 2.]
[ 1. 1. 1. 1. 1. 2. 2. 2. 2. 2.]
[ 1. 1. 1. 1. 1. 2. 2. 2. 2. 2.]
[ 1. 1. 1. 1. 1. 2. 2. 2. 2. 2.]]
[[ 1. 1. 1. 1. 1. 2. 2. 2. 2. 2.]
[ 1. 1. 1. 1. 1. 2. 2. 2. 2. 2.]
[ 1. 1. 1. 1. 1. 2. 2. 2. 2. 2.]
[ 1. 1. 1. 1. 1. 2. 2. 2. 2. 2.]]]
split Split Tensor dans la direction de cote spécifiée
import tensorflow as tf
n = np.arange(25).reshape((1,5,5))
x = tf.concat([n, n*10, n*100],0)
with tf.Session() as sess:
print(x.eval())
[[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[ 10 11 12 13 14]
[ 15 16 17 18 19]
[ 20 21 22 23 24]]
[[ 0 10 20 30 40]
[ 50 60 70 80 90]
[ 100 110 120 130 140]
[ 150 160 170 180 190]
[ 200 210 220 230 240]]
[[ 0 100 200 300 400]
[ 500 600 700 800 900]
[1000 1100 1200 1300 1400]
[1500 1600 1700 1800 1900]
[2000 2100 2200 2300 2400]]]
Exemple de division en trois dans la direction 0 dimension
import tensorflow as tf
y1, y2, y3 = tf.split(x, 3, 0)
with tf.Session() as sess:
print('y1')
print(y1.eval())
print('y2')
print(y2.eval())
print('y3')
print(y3.eval())
y1
[[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]
[15 16 17 18 19]
[20 21 22 23 24]]]
y2
[[[ 0 10 20 30 40]
[ 50 60 70 80 90]
[100 110 120 130 140]
[150 160 170 180 190]
[200 210 220 230 240]]]
y3
[[[ 0 100 200 300 400]
[ 500 600 700 800 900]
[1000 1100 1200 1300 1400]
[1500 1600 1700 1800 1900]
[2000 2100 2200 2300 2400]]]
tile
import tensorflow as tf
x = tf.constant([[1,0],[0,1]])
with tf.Session() as sess:
print(x.eval())
[[1 0]
[0 1]]
Spécifiez la direction de la cote à répéter. Ce qui suit est un exemple de répétition deux fois dans la direction 0 dimension.
import tensorflow as tf
y = tf.tile(x, [2,1])
with tf.Session() as sess:
print(y.eval())
[[1 0]
[0 1]
[1 0]
[0 1]]
Exemple de répétition deux fois dans le sens unidimensionnel
import tensorflow as tf
y = tf.tile(x, [1,2])
with tf.Session() as sess:
print(y.eval())
[[1 0 1 0]
[0 1 0 1]]
Exemple de répétition deux fois dans la direction 0 dimension et la direction 1 dimension
import tensorflow as tf
y = tf.tile(x, [2,2])
with tf.Session() as sess:
print(y.eval())
[[1 0 1 0]
[0 1 0 1]
[1 0 1 0]
[0 1 0 1]]
pad 0 rembourrage
import tensorflow as tf
n = np.arange(25).reshape((5,5))
x = tf.constant(n)
with tf.Session() as sess:
print(x.eval())
[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]
[15 16 17 18 19]
[20 21 22 23 24]]
Exemple de remplissage 1 pour le haut, 2 pour le bas, 3 pour la gauche et 4 pour la droite
import tensorflow as tf
y = tf.pad(x,[[1,2],[3,4]])
with tf.Session() as sess:
print(y.eval())
[[ 0 0 0 0 0 0 0 0 0 0 0 0]
[ 0 0 0 0 1 2 3 4 0 0 0 0]
[ 0 0 0 5 6 7 8 9 0 0 0 0]
[ 0 0 0 10 11 12 13 14 0 0 0 0]
[ 0 0 0 15 16 17 18 19 0 0 0 0]
[ 0 0 0 20 21 22 23 24 0 0 0 0]
[ 0 0 0 0 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0 0 0 0 0]]
Environnement d'exécution Anaconda 4.4.0 python 3.5.3 tensorflow 1.3.0