[PYTHON] Collection de recettes comparant les versions 1 et 2 de TensorFlow (partie 1)

introduction

Tensorflow est un framework typique pour l'apprentissage en profondeur. Ce Tensor Flow sera la version 2.0 en octobre 2019, La façon dont la source est écrite a également changé.

Cependant, la majorité des articles sont toujours écrits en version 1.X, ** Comment écrivez-vous cela après 2.0? ** ** Je pense qu'il y a beaucoup de gens qui restent coincés.

J'étais l'un d'entre eux, j'ai donc écrit un article avec un mémorandum pour revenir à l'essentiel. Je l'arrange moi-même en me référant à diverses choses, donc Si vous avez des erreurs, laissez un commentaire.

De plus, l'échantillon à introduire n'est pas expliqué en détail. Il est très simple et se spécialise dans la différence entre ver1 et ver2.

environnement

Recette collection

Graphique de flux de données

une addition

Pour ver 1.15.0

in


import tensorflow as tf

a = tf.constant(1, name='a')
b = tf.constant(2, name='b')
c = a + b

with tf.Session() as sess:
    print(sess.run(c))
    print(c)
    print(type(c))

out


3
Tensor("add:0", shape=(), dtype=int32)
<class 'tensorflow.python.framework.ops.Tensor'>

Pour ver 2.1.0

in


import tensorflow as tf

a = tf.constant(1, name='a')
b = tf.constant(2, name='b')
c = a + b

tf.print(c)
print(c)
print(type(c))

out


3
tf.Tensor(3, shape=(), dtype=int32)
<class 'tensorflow.python.framework.ops.EagerTensor'>

【référence】 tf.print

Sortie de définition

Pour ver 1.15.0

in


import tensorflow as tf

a = tf.constant(1, name='a')
b = tf.constant(2, name='b')
c = a + b

with tf.Session() as sess:
    print(sess.run(c))
    print(c)

graph = tf.get_default_graph()
print(graph.as_graph_def())

out


node {
  name: "a"
  op: "Const"
  ...(Omission)...
node {
  name: "add"
  op: "AddV2"
  input: "a"
  input: "b"
  attr {
    key: "T"
    value {
      type: DT_INT32
    }
  }
}
versions {
  producer: 134
}

Pour ver 2.1.0

in


import tensorflow as tf

graph = tf.Graph()
with graph.as_default():
    a = tf.constant(1, name='a')
    b = tf.constant(2, name='b')
    c = a + b
    print(graph.as_graph_def())

out


# ver 1.15.Omis car il est identique à 0

Attribuer des constantes aux variables

Pour ver 1.15.0

in


import tensorflow as tf

a = tf.Variable(10, name='a')
b = tf.constant(2, name='b')
c = tf.assign(a, a + b)

with tf.Session() as sess:
    # global_variables_initializer() :Initialiser toutes les variables
    sess.run(tf.global_variables_initializer())
    print(sess.run(c))
    print(sess.run(c))

out


12
14

Pour ver 2.1.0

in


import tensorflow as tf

a = tf.Variable(10, name='a')
b = tf.constant(2, name='b')
tf.print(a.assign_add(b))
tf.print(a.assign_add(b))

out


12
14

L'espace réservé disparu

Pour ver 1.15.0

in


import tensorflow as tf

a = tf.placeholder(dtype=tf.int32, name='a')
b = tf.constant(2, name='b')
c = a + b

with tf.Session() as sess:
    print(sess.run(c, feed_dict={a: 10}))
    print(a, b, c)

out


12
Tensor("a:0", dtype=int32) Tensor("b:0", shape=(), dtype=int32) Tensor("add:0", dtype=int32)

Pour ver 2.1.0

in


import tensorflow as tf

a = tf.Variable(10, name='a')
b = tf.constant(2, name='b')

# @tf.AutoGraph avec fonction
@tf.function
def add(x, y):
    return x + y

c = add(a,b)
tf.print(c)
print(type(c))
print(a, b, c)

out


12
<class 'tensorflow.python.framework.ops.EagerTensor'>
<tf.Variable 'a:0' shape=() dtype=int32, numpy=10> tf.Tensor(2, shape=(), dtype=int32) tf.Tensor(12, shape=(), dtype=int32)

【référence】 Migrate your TensorFlow 1 code to TensorFlow 2

Quatre règles

Pour ver 1.15.0

in


import tensorflow as tf

a = tf.constant(5, name='a')
b = tf.constant(2, name='b')
add = tf.add(a, b) #Ajouter
subtract = tf.subtract(a, b) #Soustraire
multiply = tf.multiply(a, b) #Multiplier
truediv = tf.truediv(a, b) #division

with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    print(sess.run(add))
    print(sess.run(subtract))
    print(sess.run(multiply))
    print(sess.run(truediv))
    print(type(add))

out


7
3
10
2.5
<class 'tensorflow.python.framework.ops.Tensor'>

Pour ver 2.1.0

in


import tensorflow as tf

a = tf.constant(5, name='a')
b = tf.constant(2, name='b')
add = tf.math.add(a, b) #Ajouter
dif = tf.math.subtract(a,b) #Soustraire
multiply = tf.math.multiply(a, b) #Multiplier
truediv = tf.math.truediv(a, b) #division

tf.print(add)
tf.print(dif)
tf.print(multiply)
tf.print(truediv)
print(type(add))

out


7
3
10
2.5
<class 'tensorflow.python.framework.ops.EagerTensor'>

【référence】 tf.math

Fonctionnement de la matrice

Pour ver 1.15.0

in


import tensorflow as tf

a = tf.constant([[1, 2], [3, 4]], name='a')
b = tf.constant([[1], [2]], name='b')
c = tf.matmul(a, b) #Matrice a,Multiplier b

with tf.Session() as sess:
    print(a.shape)
    print(b.shape)
    print(c.shape)
    print('a', sess.run(a))
    print('b', sess.run(b))
    print('c', sess.run(c))

out


(2, 2)
(2, 1)
(2, 1)
a [[1 2]
 [3 4]]
b [[1]
 [2]]
c [[ 5]
 [11]]

Pour ver 2.1.0

in


import tensorflow as tf

a = tf.constant([[1, 2], [3, 4]], name='a')
b = tf.constant([[1], [2]], name='b')
c = tf.linalg.matmul(a, b) #Matrice a,Multiplier b

print(a.shape)
print(b.shape)
print(c.shape)
tf.print('a', a)
tf.print('b', b)
tf.print('c', c)

out


# ver 1.15.Omis car il est identique à 0

en conclusion

Cette fois, j'ai résumé les bases dans les bases. La prochaine fois, j'aimerais décrire la méthode du gradient.

Recommended Posts

Collection de recettes comparant les versions 1 et 2 de TensorFlow (partie 1)
Visualisation des cartes et des filtres des fonctionnalités CNN (Tensorflow 2.0)
Traitement et jugement de la collecte du plan d'analyse des données (partie 1)
Traitement et jugement de la collecte du plan d'analyse des données (partie 2)
Estimation la plus probable de la moyenne et de la variance avec TensorFlow
J'ai vérifié les versions de Blender et Python
Bibliothèque DNN (Deep Learning): Comparaison de chainer et TensorFlow (1)
Collecte et automatisation d'images érotiques à l'aide du deep learning