Wie implementiere ich einen Minibatch-Gradientenabstieg in Python?

Ich habe gerade angefangen, tiefes Lernen zu lernen. Beim Gefälle steckte ich fest. Ich weiß, wie man einen Batch-Gradientenabstieg implementiert. Ich weiß, wie es funktioniert und wie der Minibatch- und der stochastische Gradientenabstieg theoretisch funktionieren. Kann aber wirklich nicht verstehen, wie man Code implementiert.

import numpy as np
X = np.array([ [0,0,1],[0,1,1],[1,0,1],[1,1,1] ])
y = np.array([[0,1,1,0]]).T
alpha,hidden_dim = (0.5,4)
synapse_0 = 2*np.random.random((3,hidden_dim)) - 1
synapse_1 = 2*np.random.random((hidden_dim,1)) - 1
for j in xrange(60000):
    layer_1 = 1/(1+np.exp(-(np.dot(X,synapse_0))))
    layer_2 = 1/(1+np.exp(-(np.dot(layer_1,synapse_1))))
    layer_2_delta = (layer_2 - y)*(layer_2*(1-layer_2))
    layer_1_delta = layer_2_delta.dot(synapse_1.T) * (layer_1 * (1-layer_1))
    synapse_1 -= (alpha * layer_1.T.dot(layer_2_delta))
    synapse_0 -= (alpha * X.T.dot(layer_1_delta))

Dies ist der Beispielcode aus dem Blog von ANDREW TRASK. Es ist klein und leicht zu verstehen. Dieser Code implementiert einen Batch-Gradientenabstieg, aber ich möchte in diesem Beispiel einen Mini-Batch- und einen stochastischen Gradientenabstieg implementieren. Wie könnte ich das machen? Was muss ich in diesem Code hinzufügen / ändern, um einen Minibatch- bzw. einen stochastischen Gradientenabstieg zu implementieren? Ihre Hilfe wird mir sehr helfen. Vielen Dank im Voraus. (Ich weiß, dass dieser Beispielcode nur wenige Beispiele enthält, während ich einen großen Datensatz für die Aufteilung in Minibatches benötige. Ich möchte jedoch wissen, wie ich ihn implementieren kann.)

Antworten auf die Frage(4)

Ihre Antwort auf die Frage