AttributeError: у объекта 'Variable' нет атрибута '_keras_history' при написании пользовательского слоя - PullRequest
0 голосов
/ 30 мая 2018

У меня проблема с тем, как решить эту ошибку при построении моей модели.Я попытался обернуть все свои бэкэнд-функции с помощью лямбды, но ошибка все еще сохраняется.Код ниже для справки:

arr = np.loadtxt("file.txt")
arr = arr.astype('float32')
for ii in range(len(arr)):
    a = K.tf.convert_to_tensor(arr[ii], dtype=K.tf.float32)
    #a = Lambda( lambda x: K.tf.convert_to_tensor(x, dtype=K.tf.float32) ) ## THis line gave me an error : Layer lambda_21 was called with an input that isn't a symbolic tensor.
    basis_tensor1 = Lambda( lambda x: K.reshape(x,(8,8)) )(a)
    basis_tensor.append(basis_tensor1)

basis_tensor = Lambda( lambda x: K.tf.convert_to_tensor( x, dtype=K.tf.float32) )(basis_tensor) 


def get_2d_tensor(inputs):

    coeff = inputs[0]
    basis_tensor = inputs[1]
    muls = []
    m=0
    for r in np.arange(8) :
        for c in np.arange(8) :
            f = Lambda( lambda x: K.tf.multiply(x[0],x[1]) )([coeff[:,r,c],basis_tensor[m]])

            l = Lambda( lambda x: K.tf.reshape(x,(8,8)) )(f)
            muls.append(l)
            m = m + 1
    return muls

Ниже описано, как я строю свой функциональный API:

input = Input(shape=(8,8,64,))
ConvLayer = Conv2D(512, (1,1), activation='relu')(input)
Sum1 = Lambda( lambda x: K.tf.reduce_sum(x,axis=-1) )(ConvLayer)
I = Lambda( lambda x: get_2d_tensor(x) )([Sum1,basis_tensor])
Sum = Lambda( lambda x: K.tf.reduce_sum(x,axis=0) )(I)
model = Model(inputs=[input], outputs=[Sum]) ##---> Here I get the Attribute Error!

Пожалуйста, помогите мне разобраться, как решить эту ошибку?

1 Ответ

0 голосов
/ 30 мая 2018

Пожалуйста, обратитесь к официальной документации , чтобы понять, как написать пользовательский слой

...