Проблема с 2d dft в кератах и ​​тензорном потоке - PullRequest
0 голосов
/ 07 марта 2020

Я пытаюсь создать небольшой 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'

У меня также, вероятно, есть проблемы, связанные со смешиванием кераса и тф ... что является чем-то вроде кошмара ..

...