2017-05-16 3 views
1

Ich brauche jetzt, wie Daten in einer 1d Faltungsschicht aufgefüllt werden, die Keras mit Theano als Backend verwendet. Ich benutze eine "gleiche" Polsterung.Padding mit gleichmäßiger Kerngröße in einer Faltungsschicht in Keras (Theano)

Angenommen, wir haben ein output_length von 8 und ein kernel_size von 4. Nach the original Keras code wir haben padding von 8 // 4 == 2. Wenn jedoch das Hinzufügen von zwei Nullen am linken und rechten Ende meiner horizontalen Daten, Ich könnte 9 Faltungen anstelle von 8 berechnen.

Kann mir jemand erklären, wie Daten gepolstert werden? Wo werden Nullen hinzugefügt und wie berechne ich die Anzahl der Füllwerte auf der rechten und linken Seite meiner Daten?

Antwort

1

Wie die Art und Weise keras zu Testunterlagen, die die Sequenzen:

Ein sehr einfacher Test, den Sie tun können, ist ein Modell mit einer einzigen Faltungsschicht zu erzeugen, erzwingt ihre Gewichte 1 und seine Vorurteile sein 0 zu sein und es einen Eingang mit denen geben, die Ausgabe zu sehen:

from keras.layers import * 
from keras.models import Model 
import numpy as np 


#creating the model 
inp = Input((8,1)) 
out = Conv1D(filters=1,kernel_size=4,padding='same')(inp) 
model = Model(inp,out) 


#adjusting the weights 
ws = model.layers[1].get_weights() 

ws[0] = np.ones(ws[0].shape) #weights 
ws[1] = np.zeros(ws[1].shape) #biases 

model.layers[1].set_weights(ws) 

#predicting the result for a sequence with 8 elements 
testData=np.ones((1,8,1)) 
print(model.predict(testData)) 

der Ausgang dieses Codes ist:

[[[ 2.] #a result 2 shows only 2 of the 4 kernel frames were activated 
    [ 3.] #a result 3 shows only 3 of the 4 kernel frames were activated 
    [ 4.] #a result 4 shows the full kernel was used 
    [ 4.] 
    [ 4.] 
    [ 4.] 
    [ 4.] 
    [ 3.]]] 

So können wir gemeinsam nclude dass:

  • Keras die Polsterung vor Durchführung der Faltungen fügt, nicht nach. Die Ergebnisse sind also nicht "Null".
  • Keras verteilt das Padding gleichmäßig, und wenn es eine ungerade Zahl gibt, geht es zuerst.

So machte es die Eingangsdaten wie folgt aussehen, bevor die Faltungen

[0,0,1,1,1,1,1,1,1,1,0] 
+0

Dank der Anwendung. Ich bin mir der Auswirkungen von padding = "same" bewusst. Allerdings muss ich genau wissen, wie das Padding aussieht, wenn wir einen Kernel mit einer geraden Größe haben. Im Tensorflow wird die Füllung abwechselnd auf der rechten Seite verteilt (siehe zweite Antwort hier: http://stackoverflow.com/questions/37674306/what-is-the-difference-between-same-and-valid) -padding-in-tf-nn-max-pool-von-t). – null

+0

Siehe den Test am Ende meiner Antwort, es wird sicherlich Ihre Frage beantworten. –

+0

Sind Sie sicher, dass Sie die Ausgabe von Conv2d aufrufen können? Ihr Testbeispiel kann nicht auf meinem Computer ausgeführt werden. – null

Verwandte Themen