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?

enter image description here

>>> 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!

War es hilfreich?

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),

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit datascience.stackexchange
scroll top