TypeError: дескриптор 'transpose' требует объект 'numpy.ndarray', но получил 'Tensor' - PullRequest
0 голосов
/ 13 июня 2019

Я обновил код Tensorflow 1.x до Tensorflow 2.0, но у меня есть некоторые проблемы, которые нужно исправить.Один из них - о массиве против тензора в некоторых частях кода.Я не знаю, как это исправить.

Я пробовал с tf.transpose, tf.linalg.matrix_transpose, tf.linalg.transpose в строке 29, как во внешней, так и во внутренней функции.Также я добавил .eval() в строку 30, чтобы получить массив np.array, как вы можете видеть в этой последней попытке:

TypeError                                 Traceback (most recent call last)

~/Documents/example.py in <module>
    202                       soft_gumbel_softmax=False,
    203                       hard_gumbel_softmax=False,
--> 204                       batch_discriminator=False)
    205 
    206 # optimizer

~/Documents/models/gan.py in __init__(self, vertexes, edges, nodes, embedding_dim, decoder_units, discriminator_units, decoder, discriminator, soft_gumbel_softmax, hard_gumbel_softmax, batch_discriminator)
     33         with tf.compat.v1.variable_scope('generator'):
     34             self.edges_logits, self.nodes_logits = self.decoder(self.embeddings, decoder_units, vertexes, edges, nodes,
---> 35                                                                 training=self.training, dropout_rate=self.dropout_rate)
     36 
     37         with tf.compat.v1.name_scope('outputs'):

~/Documents/models/__init__.py in decoder_adj(inputs, units, vertexes, edges, nodes, training, dropout_rate)
     28                                                   activation=None), (-1, edges, vertexes, vertexes))
     29         edges_logits = tf.transpose(a=(edges_logits + tf.linalg.matrix_transpose(edges_logits)) / 2, perm=(0, 2, 3, 1))
---> 30         edges_logits = tf.compat.v1.layers.dropout(edges_logits.eval(), dropout_rate, training=training)
     31 
     32     with tf.compat.v1.variable_scope('nodes_logits'):

TypeError: descriptor 'transpose' requires a 'numpy.ndarray' object but received a 'Tensor'

Эти последние строки взяты из этой функции:

def decoder_adj(inputs, units, vertexes, edges, nodes, training, dropout_rate=0.):
    output = multi_dense_layers(inputs, units, activation=tf.nn.tanh, dropout_rate=dropout_rate, training=training)

    with tf.compat.v1.variable_scope('edges_logits'):
        edges_logits = tf.reshape(tf.compat.v1.layers.dense(inputs=output, units=edges * vertexes * vertexes,
                                                  activation=None), (-1, edges, vertexes, vertexes))
        edges_logits = tf.transpose(a=(edges_logits + np.matrix.transpose(edges_logits)) / 2, perm=(0, 2, 3, 1))
        edges_logits = tf.compat.v1.layers.dropout(edges_logits, dropout_rate, training=training)

    with tf.compat.v1.variable_scope('nodes_logits'):
        nodes_logits = tf.compat.v1.layers.dense(inputs=output, units=vertexes * nodes, activation=None)
        nodes_logits = tf.reshape(nodes_logits, (-1, vertexes, nodes))
        nodes_logits = tf.compat.v1.layers.dropout(nodes_logits, dropout_rate, training=training)

    return edges_logits, nodes_logits

Я хотел бы знать, где, в каком формате, почему и как я должен преобразовать входные данные.

...