微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python – AttributeError:’Tensor’对象没有属性’reshape’

我想写一个去噪自动编码器,为了可视化的目的,我想打印出损坏的图像.

这是我想要显示损坏图像的测试部分:

def corrupt(x):
    noise = tf.random_normal(shape=tf.shape(x), mean=0.0, stddev=0.2, dtype=tf.float32) 
    return x + noise

# Testing
# Encode and decode images from test set and visualize their reconstruction
n = 10
canvas_orig = np.empty((28, 28 * n))
canvas_corrupt = np.empty((28, 28 * n))
canvas_recon = np.empty((28, 28 * n))

# MNIST test set
batch_x, _ = mnist.test.next_batch(n)

# Encode and decode the digit image and determine the test loss
g, l = sess.run([Y, loss], Feed_dict={X: batch_x})

# Draw the generated digits
for i in range(n):
    # Original images
    canvas_orig[0: 28, i * 28: (i + 1) * 28] = batch_x[i].reshape([28, 28])

    # Corrupted images
    canvas_corrupt[0: 28, i * 28: (i + 1) * 28] = corrupt(batch_x[i]).reshape([28, 28]) 

    # Reconstructed images
    canvas_recon[0: 28, i * 28: (i + 1) * 28] = g[i].reshape([28, 28])    

print("Original Images")     
plt.figure(figsize=(n, 1))
plt.imshow(canvas_orig, origin="upper", cmap="gray")
plt.show()

print("Corrupted Images")     
plt.figure(figsize=(n, 1))
plt.imshow(canvas_corrupt, origin="upper", cmap="gray")
plt.show()

print("Reconstructed Images")
plt.figure(figsize=(n, 1))
plt.imshow(canvas_recon, origin="upper", cmap="gray")
plt.show()

错误发生在以下行:

canvas_corrupt[0: 28, i * 28: (i + 1) * 28] = corrupt(batch_x[i]).reshape([28, 28])

我真的不明白为什么它不起作用,因为它上面和下面的陈述看起来非常相似并且工作得很好.
事实上,“重塑”是一种功能,而不是一种属性,让我感到很困惑.

解决方法:

区别在于batch_x [i]是一个numpy数组(有一个reshape方法),而corrupt(…)的结果是一个Tensor对象.从tf 1.5开始,它没有重塑方法.这不会抛出错误:tf.reshape(corrupt(batch_x [i]),[28,28]))

但是,由于你的目标是可视化值,你应该更好地避免混淆tensorflow和numpy操作并仅在numpy方面重写腐败:

def corrupt(x):
    noise = np.random.normal(size=x.shape, loc=0.0, scale=0.2)
    return x + noise

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐