Я построил пользовательский слой, который я хотел бы обучить мои данные на 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)