[PYTHON] Zusammenfassung verschiedener Operationen in Tensorflow

Einführung

Da Tensorflow eine als Tensor bezeichnete Größe verarbeitet, können Numpys Methoden usw. nicht verwendet werden. Daher muss die von Tensorflow bereitgestellte Methode verwendet werden.

Hier ist eine Zusammenfassung der vier grundlegenden Regeln und Matrixoperationen. Insbesondere wird es mit verschiedenen in Python definierten Operationen verglichen (+, -,/,//,% ).

Hinweis

Betriebsumgebung

Tensorflow 1.4.1

Vier Regeln

Zusatz tf.add

import tensorflow as tf

const1 = tf.constant(2)
const2 = tf.constant(3)
add_op = tf.add(const1, const2) # 2 + 3
with tf.Session() as sess:
    result = sess.run(add_op)
    print(result)
5

Entspricht der Python 3-Addition +.

Subtrahieren Sie "tf.subtract"

import tensorflow as tf

const1 = tf.constant(2)
const2 = tf.constant(3)
subt_op = tf.subtract(const1, const2) # 2 - 3

with tf.Session() as sess:
    result = sess.run(subt_op)
    print(result)
-1

Dies ist das gleiche wie -.

Division --Python2 ver -- tf.div


import tensorflow as tf

const1 = tf.constant(2)
const2 = tf.constant(3)
div2_op = tf.div(const1, const2) # 2 / 3 in Python2

with tf.Session() as sess:
    result = sess.run(div_op)
    print(result)
0

Entspricht der Division / in Python2. Das folgende "tf.divide" wird in Official empfohlen.

Teilen Sie --Python3 ver -- tf.divide

import tensorflow as tf

const1 = tf.constant(2)
const2 = tf.constant(3)
div_op = tf.divide(const1, const2) # 2 / 3 in Python3

with tf.Session() as sess:
    result = sess.run(div_op)
    print(result)
0.666666666667

Entspricht / in Python 3

Ganzzahlige Division tf.floordiv

import tensorflow as tf

const1 = tf.constant(2)
const2 = tf.constant(3)
fdiv_op = tf.floordiv(const1, const2) # 2 // 3

with tf.Session() as sess:
    result = sess.run(fdiv_op)
    print(result)
0

Entspricht dem // von Python3. (Nach dem Dezimalpunkt abschneiden)

Restbetrieb tf.mod

import tensorflow as tf

const1 = tf.constant(2)
const2 = tf.constant(4)
mod_op = tf.mod(const1, const2) # 2 % 3 

with tf.Session() as sess:
    result = sess.run(mod_op)
    print(result)
2

Entspricht dem% von Python3.

Skalarprodukt tf.scalar_mul

import tensorflow as tf

const1 = tf.constant(2) #Deklarieren Sie eine Konstante(Wert ist 2)
const2 = tf.constant(3)
smul_op = tf.scalar_mul(const1, const2) # 2 * 3 

with tf.Session() as sess:
    result = sess.run(smul_op)
    print(result)
6

Das Produkt von Konstanten.

Vektoraußenprodukt tf.cross

import tensorflow as tf

const1 = tf.constant([1, 2, 3])
const2 = tf.constant([4, 5, 6])
cross_op = tf.cross(const1, const2) # [1, 2, 3] x [4, 5, 6]

with tf.Session() as sess:
    result = sess.run(cross_op)
    print(result)
[-3  6 -3]

Die Definition des Vektorprodukts (äußeres Produkt) wird bei Google veröffentlicht, daher werde ich sie hier weglassen.

Matrixbetrieb

Matrix mit allen 1 Elementen tf.ones


import numpy as np
import tensorflow as tf

t = tf.ones([3, 2])

with tf.Session() as sess:
    print("tf.ones([3, 2]) = %s" % sess.run(t))    
tf.ones([3, 2]) = [[ 1.  1.]
 [ 1.  1.]
 [ 1.  1.]]

tf.ones ([3,2]): Erstellen Sie eine 3x2-Matrix mit allen Elementen 1

Matrix mit allen 0 Elementen tf.zeros


import numpy as np
import tensorflow as tf

t = tf.zeros([5])

with tf.Session() as sess:
    print("tf.zeros([5]) = %s" % sess.run(t))
tf.zeros([5]) = [ 0.  0.  0.  0.  0.]

tf.zeros ([5]): Erstellen Sie eine 1x5-Matrix mit allen Elementen 0 (Vektor mit 5 Elementen)

Matrix mit zufälligen Elementen tf.random_uniform


import numpy as np
import tensorflow as tf

t = tf.random_uniform([1, 3])

with tf.Session() as sess:
    print("tf.random_uniform([1, 3]) = %s" % sess.run(t))
tf.random_uniform([1, 3]) = [[ 0.16699052  0.04628575  0.38685966]]

tf.random_uniform ([1,3]): Erstellen Sie eine 1x3-Matrix (Vektor mit 3 Elementen) mit zufällig generierten Zahlen von 0 bis 1.

Geben Sie die Anzahl der Elemente im angegebenen Abschnitt als Liste "tf.linspace" aus


import numpy as np
import tensorflow as tf

t = tf.linspace(1.0, 7.0, 4)

with tf.Session() as sess:
    print("tf.linspace(1.0, 7.0, 4) = %s" % sess.run(t))
tf.linspace(1.0, 7.0, 4) = [ 1.  3.  5.  7.]

tf.linspace (1.0,7.0,4): Teilen Sie 1.0 bis 4.0 in vier, generieren Sie Zahlen in aufsteigender Reihenfolge und geben Sie sie als Liste (Vektor) aus.

Matrix Produkt

import tensorflow as tf

const1 = tf.random_uniform([3,2])
const2 = tf.random_uniform([2,3])
mul_op = tf.matmul(const1, const2)

with tf.Session() as sess:
    print("const1: %s" % sess.run(const1))
    print("const2: %s" % sess.run(const2))
    print("tf.matmul(const1, const2) = %s" % sess.run(mul_op))
const1: [[ 0.22310185  0.76020801]
 [ 0.04765964  0.81115341]
 [ 0.15238702  0.24294829]]
const2: [[ 0.89871132  0.3882308   0.54530931]
 [ 0.60662949  0.27270687  0.20178115]]
tf.matmul(const1, const2) = [[ 0.55778277  0.5268842   0.72335124]
 [ 0.42495638  0.3350077   0.66840851]
 [ 0.45947441  0.2069075   0.99706292]]

Die zu betrachtende Matrix sei $ A_ {ij} $, $ B_ {ij} $. Sei A eine NxM-Matrix und B eine KxL-Matrix. Zu diesem Zeitpunkt, um das Produkt durchzuführen,

Muss halten. (Das heißt, die Anzahl der Elemente in der Spalte der ersten Matrix und die Anzahl der Elemente in der Zeile der zweiten Matrix müssen übereinstimmen.) Beachten Sie, dass Fehler häufig auftreten, wenn dies vernachlässigt wird. Insbesondere können Sie "tf.transpose" verwenden, um die Matrix zu translozieren, oder die Translokation mit der Option "tf.matmul" auf "True" setzen. Weitere Informationen hierzu finden Sie in Offizielles Dokument.

Konvertieren Sie die Numpy-Liste in den Tensor "tf.convert_to_tensor"


import numpy as np
import tensorflow as tf

t = tf.convert_to_tensor(np.linspace(1, 7, 4))

with tf.Session() as sess:
    print("tf.convert_to_tensor( np.linspace(1, 7, 4) ) = %s" % sess.run(t))
tf.convert_to_tensor( np.linspace(1, 7, 4) ) = [ 1.  3.  5.  7.]

tf.convert_to_tensor: Konvertiert die generierte Numpy-Liste in einen Tensor.

Andere

Wertzuweisung


import tensorflow as tf

# see https://www.tensorflow.org/api_guides/python/state_ops
print("\n Variablen\n=====================")

w = tf.Variable(tf.zeros([3, 2])) #Variable(Warteschlange)Erklärung von w. 初期値はゼロWarteschlange

with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    
    print("w = %s" % sess.run(w))
    sess.run(tf.assign(w, tf.ones([3, 2])))

    wn = sess.run(w)
    print("w = %s" % wn)
Variable
=====================
w = [[ 0.  0.]
 [ 0.  0.]
 [ 0.  0.]]
w = [[ 1.  1.]
 [ 1.  1.]
 [ 1.  1.]]

--tf.assign (w, tf.ones ([3, 2]): Weisen Sie die Variable w tf.ones ([3,2]) `(3x2-Matrix mit allen 1 Elementen zu.

Diese Operation ist nicht auf Matrizen beschränkt. (Auch für skalare Variablen möglich)

Symbolische Operation


import tensorflow as tf

print("\n symbolische Variablen\n=====================")

a = tf.placeholder(tf.float32)
b = tf.placeholder(tf.float32)
a_times_b1 = tf.multiply(a, b) #  multiplication of a and b
a_times_b2 = a * b

with tf.Session() as sess:
    # where "name" is the python symbol
    print("%f should equal 2.0" % sess.run(a_times_b1, feed_dict={a: 1, b: 2}))
    print("%f should equal 9.0" % sess.run(a_times_b1, feed_dict={a: 3, b: 3}))
    print("%f should equal 9.0" % sess.run(a_times_b2, feed_dict={a: 3, b: 3}))
Symbolische Variable
=====================
2.000000 should equal 2.0
9.000000 should equal 9.0
9.000000 should equal 9.0

Anstatt nur einen Wert festzulegen, ersetzen Sie später mehrere Werte mit "feed_dict".

Referenz: Tensorflow-Konzept aus der Kartoffelherstellung

Verschiedene Funktionen


import tensorflow as tf

print("\n mathematische Funktion\n=====================")

x = tf.linspace(0., 4., 5)

with tf.Session() as sess:
    print("x = %s" % sess.run(x))
    print("(x+1)**2 - 2) = %s" % sess.run( (x+1)**2 - 2))
    print("sin(x) = %s" % sess.run( tf.sin(x) ))
    print("sum(x) = %s" % sess.run( tf.reduce_sum(x) ))
Mathematische Funktion
=====================
x = [ 0.  1.  2.  3.  4.]
(x+1)**2 - 2) = [ -1.   2.   7.  14.  23.]
sin(x) = [ 0.          0.84147096  0.90929741  0.14112    -0.7568025 ]
sum(x) = 10.0

Einzelheiten finden Sie in der offiziellen Dokumentation

Nehmen Sie eine Liste als Variable

Diese Funktionen können als Variablen aufgelistet werden:

print("\Vektor zu n Argument(Reihenfolge,aufführen)Kann genommen werden.(Numpy-like)\n=====================")
tf.sin(3.)
tf.sin([1., 2., 3.])
tf.sin(tf.linspace(0., 10., 20))
tf.sin(np.linspace(0, 10, 20))  # equivalent
tf.sin(tf.ones(shape=(2, 3, 4)))  # 2x3x4 tensor

# Operators (+, -, /, *)
a = tf.zeros(shape=(2, 3))
b = tf.ones(shape=(2, 3))
c = tf.ones(shape=(3, 2))

with tf.Session() as sess:
    print('a + b: %s'% sess.run(a + b))  # same as tf.add(a, b)
    print('a - b: %s' % sess.run(a - b))  # same as tf.subtract(a, b)
    print('a * b: %s' % sess.run(a * b))  # same as tf.mul(a, b)
    print('a / b: %s' % sess.run(a / b))  # same as tf.division(a, b)
# a + c  # doesn't work; tensors need to be of same shape
Vektor als Argument(Reihenfolge,aufführen)Kann genommen werden.(Numpy-like)
=====================
a + b: [[ 1.  1.  1.]
 [ 1.  1.  1.]]
a - b: [[-1. -1. -1.]
 [-1. -1. -1.]]
a * b: [[ 0.  0.  0.]
 [ 0.  0.  0.]]
a / b: [[ 0.  0.  0.]
 [ 0.  0.  0.]]

Informationen zur eifrigen Ausführung

Lassen Sie uns ein Beispiel für die Eager-Ausführung als Beispiel für einige der oben behandelten Inhalte geben.

Beispiel 1: Zugabe

Wenn ich den Additionscode umschreibe,


import tensorflow as tf
import tensorflow.contrib.eager as tfe

tfe.enable_eager_execution()

const1 = tf.constant(2)
const2 = tf.constant(3)
add_op = tf.add(const1, const2) # 2 + 3
print(add_op)
# tf.Tensor(5, shape=(), dtype=int32)

Es wird sein. Stellen Sie zunächst sicher, dass Sie zu Beginn des Programms "tfe.enable_eager_execution ()" schreiben. (Wenn auf Jupyter ausgeführt wird, ist noch Speicher im Kernel vorhanden

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-2-a35e1dbe978d> in <module>()
      2 import tensorflow.contrib.eager as tfe
      3 
----> 4 tfe.enable_eager_execution()
      5 
      6 const1 = tf.constant(2)

/usr/local/lib/python3.6/site-packages/tensorflow/python/framework/ops.py in enable_eager_execution(config, device_policy)
   4892   else:
   4893     raise ValueError(
-> 4894         "tfe.enable_eager_execution has to be called at program startup.")
   4895 
   4896 

ValueError: tfe.enable_eager_execution has to be called at program startup.

(Beispiel), daher ist ein Neustart des Kernels unerlässlich. Die Art des Ausgabeergebnisses ist übrigens

type(add_op)
# EagerTensor

Es ist geworden. Wenn Sie versuchen, diesem Wert "3" hinzuzufügen,


add_op + 3
# <tf.Tensor: id=5, shape=(), dtype=int32, numpy=8>

Und es wird korrekt als Wert von numpy berechnet. Verwenden Sie die Methode numpy (), um diesen Wert abzurufen. Mit anderen Worten

add_op2 = add_op + 3
print(add_op2.numpy())
# 8

Sie können den Wert von abrufen. Der Typ dieses Wertes ist

type(add_op2)
# numpy.int32

Da dies der Fall ist, ist eine normale Berechnung mit vier Regeln möglich.

Beispiel 2: Wertzuweisung

Auf die gleiche Weise, wenn Sie den Wertzuweisungscode neu schreiben


import tensorflow as tf
import tensorflow.contrib.eager as tfe

tfe.enable_eager_execution()

# see https://www.tensorflow.org/api_guides/python/state_ops
print("\n Variablen\n=====================")

w = tfe.Variable(tf.zeros([3, 2])) #Variable(Warteschlange)Erklärung von w. 初期値はゼロWarteschlange

tf.global_variables_initializer()

print("w = %s" % w)
tf.assign(w, tf.ones([3, 2]))

wn = w
print("w = %s" % wn)

#Variable
# =====================
# w = <tf.Variable 'Variable:0' shape=(3, 2) dtype=float32, numpy=
# array([[0., 0.],
#        [0., 0.],
#        [0., 0.]], dtype=float32)>
# w = <tf.Variable 'Variable:0' shape=(3, 2) dtype=float32, numpy=
# array([[1., 1.],
#        [1., 1.],
#        [1., 1.]], dtype=float32)>

Es wird sein. Beachten Sie, dass wir bei der Deklaration von Variablen hier tfe.Variable verwenden. (Abgesehen davon kann tf.Placeholder nicht verwendet werden, wenn eine eifrige Ausführung verwendet wird.) Ansonsten kann es auf die gleiche Weise umgeschrieben werden, indem alle "with" -Anweisungen entfernt werden. Wie zuvor, um den Wert abzurufen

print(w.numpy()

# array([[1., 1.],
#       [1., 1.],
#       [1., 1.]], dtype=float32)

Sie können den Wert abrufen, indem Sie (sowie wn) ausführen. Wie in Beispiel 1 oben können wir die Methode numpy () verwenden, um sie als Numpy-Array abzurufen und die vier Regeln von Numpy auszuführen.

Recommended Posts

Zusammenfassung verschiedener Operationen in Tensorflow
Zusammenfassung verschiedener for-Anweisungen in Python
Tensorflow / Keras-Zusammenfassung
Zusammenfassung der Zeichenfolgenoperationen
Zusammenfassung der Excel-Operationen mit OpenPyXL in Python
Zusammenfassung der Python-Dateivorgänge
Zusammenfassung der Python3-Listenoperationen
Verstehen Sie die Bilder verschiedener Matrixoperationen, die in Keras (Tensorflow) verwendet werden, anhand von Beispielen
Zusammenfassung der häufig verwendeten Methoden bei Pandas
Zusammenfassung der häufig verwendeten Befehle in matplotlib
Zusammenfassung der Stolpersteine bei der Installation von CaboCha
Zusammenfassung der Module und Klassen in Python-TensorFlow2-
Zusammenfassung der integrierten Methoden usw. der Python-Liste
Zusammenfassung der häufig mit asyncpg ausgeführten Vorgänge
Zusammenfassung der von Pandas 1 häufig ausgeführten Prozesse (CSV-, Excel-Datei-bezogene Vorgänge)
Zusammenfassung der 2016 erstellten OSS-Tools und -Bibliotheken
Zusammenfassung zum Importieren von Dateien in Python 3
Zusammenfassung dessen, was bei 100 Pandas-Schlägen verwendet wurde (# 1 ~ # 32)
Zusammenfassung der in Command Line Vol.8 verwendeten Tools
Zusammenfassung der in Command Line Vol.5 verwendeten Tools
Zusammenfassung der beim maschinellen Lernen verwendeten Bewertungsfunktionen
[Python] Zusammenfassung der S3-Dateivorgänge mit boto3
Das Checkpoint-Format von tf.train.Saver wurde in TensorFlow v0.12 geändert
Zusammenfassung der Fehlerbehandlungsmethoden bei der Installation von TensorFlow (2)
Dateioperationen in Python
Numerische Darstellung von Tagen in verschiedenen Sprachen
Zusammenfassung der Tools, die zum Analysieren von Daten in Python benötigt werden
Verschiedene Zeichenkettenoperationen
Zusammenfassung der Linux (UNIX) -Befehle, die mit Progate ausgegeben wurden
Zusammenfassung der Verwendung von pyenv
Old openssl verursacht Probleme in verschiedenen Teilen von Python
Dateimanipulation mit Python
HMAC in verschiedenen Sprachen
Ausführungsverfahren von TensorFlow bei der Stapelverarbeitung von Spacon ITO
Zusammenfassung der Trennung der Entwicklungsumgebung nach Chroot verschiedener Linux
Zusammenfassung der Python-Argumente
Zusammenfassung der Testmethode
Zusammenfassung der Datumsverarbeitung in Python (Datum / Uhrzeit und Datum)
Verschiedene Verarbeitung von Python
Zusammenfassung der Prototypmuster der Einführung in Entwurfsmuster, die in Java gelernt wurden
Grundlegende Zusammenfassung der Datenoperationen in Python Pandas - Zweite Hälfte: Datenaggregation
Singleton-Musterzusammenfassung der Einführung in Entwurfsmuster, die in Java gelernt wurden
[Für Anfänger] Zusammenfassung der Standardeingabe in Python (mit Erklärung)
Zusammenfassung der Stolperpunkte in Django zum ersten Mal
Ich habe verschiedene Methoden der Kommunikation zwischen Prozessen bei der Mehrfachverarbeitung von Python3 gemessen
Chaos Rückkehr der logistischen Kartierung durch Petit RNN in Tensorflow
Zusammenfassung zum Schreiben von in gRPC verwendeten .proto-Dateien
Die Geschichte der Herabstufung der Version von Tensorflow in der Demo von Mask R-CNN.
Vier Regeln für Python
Clipping und Normalisierung in TensorFlow
Was ist neu in Python 3.10 (Zusammenfassung)
2017.3.6 ~ 3.12 Zusammenfassung unserer Aktivitäten
Experiment zur Optimierung der Tensorflow-Daten
Teilweise bei Problemen
Verschiedene String-Operationen in Python integriert
Verschiedene Möglichkeiten, Mnist zu importieren
Liste der Knoten in Diagrammen