Es scheint ein wenig umständlich zu sein, die Batch-Dimension für jede Schicht in einem neuronalen Netzwerk zu berücksichtigen. Warum haben wir nicht eine Funktionalität in Tensorflow, die nur die Batch-Größe für ein ganzes Modell festlegen kann?Warum müssen wir uns bei der Angabe eines Modells in Tensorflow um die Batch-Dimension kümmern?
2
A
Antwort
2
Im Tensorflow müssen Sie nicht berücksichtigen die Batch-Größe berücksichtigen.
In der MNIST Tutorial wird erklärt, wie Tensorflow Chargen jeder Größe handhabt.
Zitiert das Tutorial:
x = tf.placeholder(tf.float32, shape=[None, 784])
y_ = tf.placeholder(tf.float32, shape=[None, 10])
die Eingangsbilder x eines 2D-Tensor Gleitkommazahlen bestehen. Hier weisen wir ihm eine Form von [None, 784]
zu, wobei 784 die Dimensionalität eines einzelnen abgeflachten MNIST-Bildes ist, und None
zeigt an, dass die erste Dimension, die der Losgröße entspricht, eine beliebige Größe haben kann.
Ich verstehe diesen Teil. Ich verstehe, dass die Batch-Größe nicht im Voraus festgelegt werden muss. Variablen für jede Ebene tragen jedoch immer noch die Größe der Stapelgröße, und Sie müssen sich immer Gedanken über diese Dimension machen, wenn Sie alles in Ihr Modell schreiben, insbesondere für Umformungen. Ich spreche über ein Szenario, in dem Variablen diese Dimension überhaupt nicht tragen, aber am Ende, sagen Sie, replizieren Sie dasselbe Diagramm für jede Probe im Batch. Dies kann viel Komplexität sparen. – user3320467
Tensorflow ist ein generisches Berechnungsframework. Einige Ops führen Batch-Operationen aus, einige haben kein Batch-Konzept. Beispiele für letztere sind Matmul und all die verschiedenen elementweisen Operationen wie Tanh und Tensor-Addition. Diese folgen nur numply-artigen Übertragungsregeln. Jeder Batch-Vorgang würde die Tensorflow-API einschränken und die Entwicklung neuer Operationen erschweren. –