python - TypeError:描述符“转置”需要一个“numpy.ndarray”对象但收到一个“张量”
问题描述
我已将 Tensorflow 1.x 代码升级到 Tensorflow 2.0,但我有一些问题需要解决。其中之一是代码的某些部分中的 numpy 数组与张量。我不知道如何解决它。
我尝试在第 29 行使用tf.transpose
, tf.linalg.matrix_transpose
,tf.linalg.transpose
在外部和内部功能中。我.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
我想知道我应该在哪里、以哪种格式、为什么以及如何转换输入。
解决方案
推荐阅读
- java - Groovy 脚本错误:java.io.NotSerializableException:com.xlson.groovycsv.CsvIterator
- ravendb - RavenDB 4+ 分页查询,字段不同
- r - 在 R 中,这个括号 `[` 是什么?
- php - Laravel:使用外键从表中获取数据
- python - 在查询集中 Django DRF 中分别获取每个项目的计数
- flash-memory - Teraterm linux相当于将二进制文件推送到设备
- ubuntu - 如何防止ubuntu强制关机?
- java - 在简单的速度报告中实现递归
- gtk - 如何获取自定义 gtk 小部件的大小?
- ruby-on-rails - seed.rb 是名词还是动词?