почему мой определенный слой вышел из строя в керасе? - PullRequest
0 голосов
/ 02 июля 2019

сообщение об ошибке: Ошибка типа: не удалось преобразовать объект типа в Tensor.Содержание: (Нет, 3).Рассмотрим приведение элементов к поддерживаемому типу.

Может кто-нибудь помочь мне с этой ошибкой, я думаю, что я определил этот слой очень похоже с плотным слоем, почему он не работает?

мой код слоя:

from keras.layers.core import Layer
from keras.engine import InputSpec
from keras import backend as K
try:
from keras import initializations
except ImportError:
from keras import initializers as initializations

import numpy as np
class HardAttention(Layer):
def init(self, **kwargs):
super(HardAttention, self).init(**kwargs)
self.input_spec = InputSpec(min_ndim=2)

def build(self, input_shape):
    input_dim = input_shape[-1]
    self.attention = self.add_weight(shape=input_shape,
                                     initializer='uniform',
                                     name='attention',
                                     dtype=np.float32,
                                     trainable=True)
                                     #dtype=bool)
    self.input_spec = InputSpec(min_ndim=2, axes={-1: input_dim})
    self.built = True
    super(HardAttention, self).build(input_shape)

def call(self, inputs):
    return K.multiply(inputs, self.attention)

def compute_output_shape(self, input_shape):
    return input_shape

код модели:

(time_step, n_stock) = np.shape(x_train)

model = Sequential()
model.add(InputLayer(input_shape=(3,)))
model.add(HardAttention())
model.add(Dense(5))

model.compile(optimizer='adam', loss='mse')
model.summary()

1 Ответ

0 голосов
/ 02 июля 2019

Вы хотите использовать слой с именем Input.Не импортировать InputLayer из движка.

Следующий код работает в Colab (tf 1.4).

from tensorflow.keras.layers import *
from tensorflow.keras.models import Sequential
from keras import backend as K

import numpy as np

class HardAttention(Layer):
  def init(self, **kwargs):
    super(HardAttention, self).init(**kwargs)

def build(self, input_shape):
    input_dim = input_shape[-1]
    self.attention = self.add_weight(shape=input_shape,
                                     initializer='uniform',
                                     name='attention',
                                     dtype=np.float32,
                                     trainable=True)
                                     #dtype=bool)
    self.built = True
    super(HardAttention, self).build(input_shape)

def call(self, inputs):
    return K.multiply(inputs, self.attention)

def compute_output_shape(self, input_shape):
    return input_shape

model = Sequential()
model.add(Input(shape=(3,)))
model.add(HardAttention())
model.add(Dense(5))

model.compile(optimizer='adam', loss='mse')
model.summary()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...