Я пытаюсь создать небольшой CNN с одним лямбда / настроенным слоем, который выполняет fft2d предыдущего слоя, скажем, например, входной слой, я пытаюсь с классом fft_layer:
from keras import backend as K
from keras.engine.topology import Layer
import tensorflow as tf
from keras.models import Sequential
import numpy as np
class fft2_layer(Layer):
def __init__(self, **kwargs):
self.output_dim=0
super(fft2_layer, self).__init__(**kwargs)
def build(self, input_shape):
# Create a trainable weight variable for this layer.
#self.kernel = self.add_weight(name='kernel', shape=(1,) + input_shape[1:],initializer='uniform',trainable=False)
super(fft2_layer, self).build(input_shape) # Be sure to call this somewhere!
def call(self, x):
print('x SHAPE '+str(x)+'\n')
self.output_dim=x.shape
X=tf.keras.layers.Lambda(tf.signal.fft2d)(tf.cast(x,tf.complex64))
print(self.output_dim)
return X
def compute_output_shape(self, input_shape):
print(self.output_dim)
return self.output_dim
и небольшая тестовая сеть построена с:
N=64
model = Sequential()
model.add(fft2_layer(input_shape=(N, N)))
model.compile(loss='mean_squared_error', optimizer='adam')
print(model.summary())
Я думаю, что это может быть проблема типа слоя / массива или что-то в этом роде ... На данный момент я получаю следующую ошибку:
inbound_layers = nest.map_structure(lambda t: t._keras_history.layer,
AttributeError: 'tuple' object has no attribute 'layer'
У меня также, вероятно, есть проблемы, связанные со смешиванием кераса и тф ... что является чем-то вроде кошмара ..