Verständnis von Faltungsbadgrößen (Deep Learning)
-
16-10-2019 - |
Frage
Ich bin dumm, versuche aber immer noch, den daraus bereitgestellten Code zu verstehen E-Book beim Deep -Lernen, aber es erklärt nicht, wo die n_in=40*4*4
kommt von. 40
stammt aus den 40 früheren Feature -Karten, aber was ist mit dem 4*4
?
>>> net = Network([
ConvPoolLayer(image_shape=(mini_batch_size, 1, 28, 28),
filter_shape=(20, 1, 5, 5),
poolsize=(2, 2),
activation_fn=ReLU),
ConvPoolLayer(image_shape=(mini_batch_size, 20, 12, 12),
filter_shape=(40, 20, 5, 5),
poolsize=(2, 2),
activation_fn=ReLU),
FullyConnectedLayer(
n_in=40*4*4, n_out=1000, activation_fn=ReLU, p_dropout=0.5),
FullyConnectedLayer(
n_in=1000, n_out=1000, activation_fn=ReLU, p_dropout=0.5),
SoftmaxLayer(n_in=1000, n_out=10, p_dropout=0.5)],
mini_batch_size)
>>> net.SGD(expanded_training_data, 40, mini_batch_size, 0.03,
validation_data, test_data)
Was ist beispielsweise, wenn ich eine ähnliche Analyse in 1D mache, wie unten gezeigt? n_in
Begriff sein?
>>> net = Network([
ConvPoolLayer(image_shape=(mini_batch_size, 1, 81, 1),
filter_shape=(20, 1, 5, 1),
poolsize=(2, 1),
activation_fn=ReLU),
ConvPoolLayer(image_shape=(mini_batch_size, 20, 12, 1),
filter_shape=(40, 20, 5, 1),
poolsize=(2, 1),
activation_fn=ReLU),
FullyConnectedLayer(
n_in=40*???, n_out=1000, activation_fn=ReLU, p_dropout=0.5),
FullyConnectedLayer(
n_in=1000, n_out=1000, activation_fn=ReLU, p_dropout=0.5),
SoftmaxLayer(n_in=1000, n_out=10, p_dropout=0.5)],
mini_batch_size)
>>> net.SGD(expanded_training_data, 40, mini_batch_size, 0.03,
validation_data, test_data)
Vielen Dank!
Lösung
In dem angegebenen Beispiel aus dem E-Book stammt die Zahl 4 von (12-5+1)/2, wobei 12 die Eingangsbildgröße (12*12) der zweiten konstitutionellen Schicht ist; 5 ist die in dieser Schicht verwendete Filtergröße (5*5); und 2 ist die Poolsize.
Dies ähnelt der Art und Weise, wie Sie die Nummer 12 aus der ersten Verfassungsschicht erhalten: 12 = (28-5+1)/2. Es wird in Ihrem verknüpften Kapitel gut erklärt.
In Bezug auf Ihren "zum Beispiel" Code ist Ihre 6. Zeile nicht korrekt:
Convpoollayer (Image_shape = (mini_batch_size, 20, 12, 1),
Die Zahl 12 sollte durch (81-5+1)/2 ersetzt werden, was leider keine Ganzzahl ist. Möglicherweise möchten Sie das Filter_Shape in der ersten Ebene in (6,1) ändern, damit es funktioniert. In diesem Fall sollte Ihre 6. Zeile sein:
Convpoollayer (Image_shape = (mini_batch_size, 20, 38, 1),
Und Ihre 11. Zeile sollte sein:
n_in = 40*17*1, n_out = 1000, active_fn = relu, p_dropout = 0,5),