Supponendo che abbia una rete neurale molto semplice, come il percettore multistrato. Per ogni livello la funzione di attivazione è sigmoid e la rete è completamente connessa.TensorFlow Training
In tensorflow questo potrebbe essere definito in questo modo:
sess = tf.InteractiveSession()
# Training Tensor
x = tf.placeholder(tf.float32, shape = [None, n_fft])
# Label Tensor
y_ = tf.placeholder(tf.float32, shape = [None, n_fft])
# Declaring variable buffer for weights W and bias b
# Layer structure [n_fft, n_fft, n_fft, n_fft]
# Input -> Layer 1
struct_w = [n_fft, n_fft]
struct_b = [n_fft]
W1 = weight_variable(struct_w, 'W1')
b1 = bias_variable(struct_b, 'b1')
h1 = tf.nn.sigmoid(tf.matmul(x, W1) + b1)
# Layer1 -> Layer 2
W2 = weight_variable(struct_w, 'W2')
b2 = bias_variable(struct_b, 'b2')
h2 = tf.nn.sigmoid(tf.matmul(h1, W2) + b2)
# Layer2 -> output
W3 = weight_variable(struct_w, 'W3')
b3 = bias_variable(struct_b, 'b3')
y = tf.nn.sigmoid(tf.matmul(h2, W3) + b3)
# Calculating difference between label and output using mean square error
mse = tf.reduce_mean(tf.square(y - y_))
# Train the Model
# Gradient Descent
train_step = tf.train.GradientDescentOptimizer(0.3).minimize(mse)
L'obiettivo di progettazione per questo modello è quello di mappare un n_fft
punti spettrogramma FFT ad un altro spettrogramma n_fft
bersaglio. Supponiamo che i dati di allenamento e di destinazione siano entrambi di dimensioni [3000, n_fft]
. Sono memorizzati nelle variabili spec_train
e spec_target
.
Ora arriva la domanda. Per TensorFlow c'è qualche differenza tra questi due allenamenti?
Training 1:
for i in xrange(200):
train_step.run(feed_dict = {x: spec_train, y_: spec_target})
Training 2:
for i in xrange(200):
for j in xrange(3000):
train = spec_train[j, :].reshape(1, n_fft)
label = spec_target[j, :].reshape(1, n_fft)
train_step.run(feed_dict = {x: train, y_: label})
Grazie mille!
Questo è quello che ho ottenuto dal tuo post. Nella versione 1 i pesi e i bias non verranno aggiornati fino a quando il programma non trasmetterà l'intero batch di dati al modello. Ciò significa che 3000 punti dati produrranno una grande regolazione del peso.E per la versione 2 è come se io usassi quei 3000 punti dati per aggiornare i pesi per 3000 volte, 3000 regolazioni di piccolo peso. È corretto? Grazie. – yc2986
Esatto, sì. E se si eseguono 3000 aggiornamenti separati, gli aggiornamenti successivi utilizzeranno versioni più aggiornate dei parametri, che tenderanno a migliorare la convergenza (per ciascun punto di dati addestrato). – mrry
@mrry Puoi spiegare perché "L'elaborazione di un singolo elemento alla volta è teoricamente auspicabile"? Ho sempre pensato che una maggiore dimensione del lotto fosse migliore. –