Ich versuche, eine Schicht (über Lambda-Schicht) zu implementieren, die die folgende numpy Prozedur tun:Wie die Losgröße innerhalb Lambda-Schicht bekommen
def func(x, n):
return np.concatenate((x[:, :n], np.tile(x[:, n:].mean(axis = 0), (x.shape[0], 1))), axis = 1)
Ich bin stecken, weil ich nicht weiß, Wie man die Größe der ersten Dimension von x (das ist die Batch-Größe). Die Backend-Funktion int_shape(x)
gibt (None, ...)
zurück.
Also, wenn ich die batch_size weiß, würden die entsprechenden keras Verfahren sein:
def func(x, n):
return K.concatenate([x[:, :n], K.tile(K.mean(x[:, n:], axis=0), [batch_size, 1])], axis = 1)
Sie müssen 'batch_size' irgendwo in Ihrem Code festgelegt haben, verwenden Sie einfach diese Variable. Fehle ich etwas? –
In meinem Setup hat jede Charge eine eigene Größe. – felagund
Ich habe es versucht, aber K.int_shape (x) [0] = Keine. Ich vermute, dass int_shape die Größe nicht für den variierten Stapel zurückgibt, sondern die Eingabeform des Layers. Und das ist (None, n1, n2, ...), weil die erste Dimension eine Batch-Größe ist und ein beliebiger Wert sein kann. – felagund