Я пытаюсь применить бета-вариационный автоэнкодер к 1D-данным. Я уже нашел код в Интернете, но он предназначен для данных изображений. У меня проблемы с адаптацией кода к 1D. Я получаю ValueError: Невозможно преобразовать частично известную TensorShape в ошибку Tensor: (?, 1024), и я думаю, что это может быть из-за того, как рассчитывается потеря?
stddev = x[1]
print('mean = ', mean)
print('stddev = ', stddev)
if self.reg == 'bvae':
# kl divergence:
latent_loss = -0.5 * K.mean(1 + stddev
- K.square(mean)
- K.exp(stddev), axis=-1)
# use beta to force less usage of vector space:
# also try to use <capacity> dimensions of the space:
print("latent_loss", latent_loss)
latent_loss = self.beta * K.abs(latent_loss - self.capacity/self.shape.as_list()[1])
print("latent_loss", latent_loss)
self.add_loss(latent_loss, x)
def Build(self):
# create the input layer for feeding the netowrk
inLayer = Input(shape=(16889,))
net = Dense(1024, activation='relu',kernel_initializer='glorot_uniform')(inLayer)
net = BatchNormalization()(net)
net = Activation('relu')(net)
mean = Dense(1024, name = 'mean')(net)
stddev = Dense(1024, name = 'std')(net)
sample = SampleLayer(self.latentConstraints, self.beta,self.latentCapacity, self.randomSample)([mean, stddev])
return Model(inputs=inLayer, outputs=sample)```