为什么是plt.imsave公司()给我一个类型错误:类型错误:在使用tensorflow重塑内核时,图像数据无法转换为float?

2024-04-25 15:23:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我不明白matplotlib为什么给我一个类型错误: TypeError: Image data cannot be converted to float

提前感谢任何能回答我疑问的人。在

如果代码在这篇文章中不清楚,你可以去这个仓库下载它- Code

如果需要,您可以使用数据集给我一个解决方案-Dataset

同时下载此文件-libs

所需的功能-

def gauss2d(mean, stddev, ksize):
    z = gauss(mean, stddev, ksize)
    g = tf.Graph()
    with tf.Session(graph=g):
        z_2d = tf.matmul(tf.reshape(z, [ksize, 1]), tf.reshape(z, [1, ksize]))
        return z_2d.eval()


def convolve(img, kernel):
    g = tf.Graph()
    with tf.Session(graph=g):
        convolved = tf.nn.conv2d(img, kernel, strides=[1, 1, 1, 1], padding='SAME')
        res = convolved.eval()
    return res


def gabor(ksize=32):
    g = tf.Graph()
    with tf.Session(graph=g):
        z_2d = gauss2d(0.0, 1.0, ksize)
        ones = tf.ones((1, ksize))
        ys = tf.sin(tf.linspace(-3.0, 3.0, ksize))
        ys = tf.reshape(ys, [ksize, 1])
        wave = tf.matmul(ys, ones)
        gabor = tf.multiply(wave, z_2d)
        return gabor.eval()

我的代码-

^{pr2}$

我知道在stackoverflow上有很多这样的问题,但没有一个能解决我的问题。我试着减少和增加维度,但没有成功。我甚至试图转换成一个numpy数组,但也没用,我甚至把它转换成一个普通的python列表


Tags: 代码returnsessiontfdefwithevalones
1条回答
网友
1楼 · 发布于 2024-04-25 15:23:08

哦,尤里卡!我知道了,我没有在一个会话中运行它,而保存映像是个问题。我刚刚把这个问题的答案贴出来了-

kernel = np.concatenate([gabor(ksize)[:, :, np.newaxis] for i in range(3)], axis=2)

# Now make the kernels into the shape: [ksize, ksize, 3, 1]:
kernel_4d = tf.reshape(kernel, [3, 3, 3, 1])
assert(kernel_4d.shape == (ksize, ksize, 3, 1))

sess = tf.Session()
plt.figure(figsize=(5, 5))
plt.imshow(sess.run(kernel_4d[:, :, 0, 0]), cmap='gray')
# added sess.run() to kernel↓
plt.imsave(arr=sess.run(kernel_4d[:, :, 0, 0]), fname='kernel.png', cmap='gray')

相关问题 更多 >