как построить и обучить модель на не символьных c тензорах (мне нужно преобразовать тензор в numpy в функции декодера) - PullRequest
0 голосов
/ 10 февраля 2020

В основном я пишу автоэнкодер, в котором функция декодера имеет некоторые дополнительные шаги и должна преобразовать тензоры в numpy, применить некоторые функции к массиву numpy и, наконец, преобразовать массив numpy обратно в тензор .


latent_dim=256

def encoder(train):

    conv1 = Conv2D(32, (3, 3),strides=2, activation='relu',  padding='same', name='myconv1')(train)
    conv2 = Conv2D(64, (3, 3), activation='relu', padding='same')(conv1)
    x = Flatten()(conv2)
    latent = Dense(latent_dim, name='latent_vector')(x)
    return latent

def decoder( latent): 
    x = Dense(256)(latent)
    latent = Reshape((16, 16, 1))(x)
    conv3 = Conv2DTranspose(64, (3, 3),strides=2, activation='relu', padding='same')(latent)
    decoded = Conv2DTranspose(32, (3, 3),strides=2, activation='sigmoid', padding='same')(conv3)
    decoded = Conv2DTranspose(1, (3,3), padding='same')(decoded)
    decoded = Activation('tanh', name='decoder_output')(decoded)

    final_output= extrafunction(decoded, myid, sn, header, sess)

   return final_output


def extrafunction( decoded, sess):

    with sess.as_default():
        sess.run(var)
        # convert to numpy
        decoded=decoded.eval()

    # In this section, I run some external function with the decoded variable as the input to that function

    outputs=externalfunction(decoded) # outputs is in numpy
    outputs= tf.convert_to_tensor(outputs, dtype=tf.float64)

    return outputs

, поскольку внешней функции необходимо преобразовать тензор в numpy, используя тензоры symboli c для построения модели как

X = tf.placeholder("float", [None, 64,64,1])
encoder_op = encoder(X)
decoder_op = decoder(encoder_op) 

, чтобы сгенерировать ошибку при

decoded=decoded.eval()
 InvalidArgumentError: You must feed a value for placeholder tensor 'Placeholder_2' with dtype float and shape [?,64,64,1] 

С другой стороны, если я использую реальные тензоры (non-symboli c one), я получаю следующую ошибку в первой строке функции кодировщика.

ValueError: Unexpectedly found an instance of type `<class 'numpy.ndarray'>`. Expected a symbolic tensor instance.

Мне нужна помощь, чтобы решить эту проблему. Я не знаю, как определить мою модель, собрать и обучить ее с этой конфигурацией. Любые предложения приветствуются.

...