tf.Keras - сброс формы последовательного ввода в пользовательский слой - PullRequest
0 голосов
/ 11 марта 2019

Я построил пользовательский слой, который я хотел бы обучить мои данные на 6 слоев. Первый вход в мой слой работает просто отлично, но ввод во второй слой - нет. Это из-за _features = tf.reshape(_features, [batch_size, -1]) части моего кода. После того, как первый слой завершен, мой вход во второй слой имеет сплющенную форму. Есть ли способ преобразовать это обратно в его обычную форму после завершения процесса обратного распространения каждого слоя?

class convLayer(layers.Layer):
    def __init__(self, output_dim, adjacency, batch_size, **kwargs):
        self.output_dim = output_dim
        self.adjacency = adjacency # adj shape is [should be batch size , 50, 50]
        self.batch_size = batch_size # hyper parameter 
        super(convLayer, self).__init__(**kwargs)

    def build(self, input_shape):
        shape = tf.TensorShape((input_shape[1], self.output_dim))
        shape = [int(shape[0]),int(shape[1])] # [50 , 32]
        self.kernel = self.add_weight(... shape = shape)
        self.bias = self.add_weight(... shape = shape)

        super(convLayer, self).build(input_shape)

    def call(self, inputs):
        _features = conv_models.GCN(inputs,self.adjacency,self.kernel,self.bias) #[ batch_size, 50, 32]
        _features = tf.reshape(_features, [batch_size, -1]) # [batch_size 1600], fl. 32
        _features = tf.cast(_features, tf.float64) # [batch_size 1600], fl. 64
        return _features


conv_output = 32
K.set_learning_phase(1)
batch_size = 100
num_layers = 6

model = tf.keras.Sequential()
#where i add the layers
for i in range(num_layers):
    model.add(convLayer(32,adj[:100],batch_size))

model.compile(optimizer=tf.keras.optimizers.Adam(0.001),
              loss='mse',
              metrics=['mae'])

model.fit(features[0:100], test[0:100],batch_size = 100)
...