Почему я получаю ValueError: Невозможно преобразовать частично известный TensorShape в Tensor? - PullRequest
0 голосов
/ 10 апреля 2019

Я пытаюсь применить бета-вариационный автоэнкодер к 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)```
...