2017-06-16 48 views
0

我是张力流初学者,请耐心等待。 现在我正在尝试修改创建超分辨率图像的CNN的现有python程序。该代码可以在这里找到,如果你有兴趣:https://github.com/pinae/Superresolution张力流形状与黑白图像问题

输入张量的形状< 5,240,320,3>,5是批量大小,240和320图像的大小和3是数字的通道(RGB)。我想修改该计划的黑白图像,所以只需1个通道 - > < 5,240,320,1>

首先,我的测试和验证图像转换到B/W:

image = image.convert('L') 

的图像然后写入数组,这是我的问题开始的地方。该阵列的大小为< 240,320>。 5张图像的数组被写入一个列表并被移交给tensorflow。

Tensorflow预计< 5,240,320,1>张量,但图像列表的形状为< 5,240,320>,因此缺少一个维度。我试着用np.expand_dims等添加一个维度,但没有成功。

input_batches = np.expand_dims(input_batches, axis=-1) 

为什么tensorflow占位符的通道的索引似乎从1开始,而分辨率的索引从0开始?

我确定在调整过滤器的过程中会出现更多的问题,但这是我现在卡住的地方。

+0

没有时间写了一个完整的答案,看看这个,但如果你看看MNIST的例子,它们是黑白的,应该给你一些指示。 – JCooke

回答

0

您需要了解代码。我相信这个问题可能会根深蒂固。有限的信息,我假设你正在使用network.py。在那里,我们在16行看到:

self.inputs = tf.placeholder(
     tf.float32, [batch_size, dimensions[1], dimensions[0], 3], name='input_images' 
    ) 

深度尺寸已经被硬编码为3。你也可以编辑它,也可以编辑许多其他的东西。

作为一个告诫,大多数超分辨率的CNN使用小的补丁大小。绝对不是(240, 320),我怀疑由于批量小,它很难收敛。

+0

我已经将它改为dimension = 1。我相信我将不得不做出许多改变,但首先我需要解决这个问题。 –

+0

如果您可以发布更多信息,那就太好了。我不知道'input_batches'被送到哪里。 – jkschin

+0

input_batches只是图像数组的列表。这被输入张量self.inputs(以及其他张量)。张量的形状为5,240,320,1,但我的列表的形状为5,240,320。我试过了expand_dims,但这不起作用。 –

0

如果你有形状的张量[5240320]你可以重塑它是[5,240,320,1]这一个命令

correctSizedTensor = tf.reshape(wrongSizedTensor, [5,240,320,1]) 
+0

是否有可能重塑清单? –

+0

是的,只要该列表被放入张量流中就可以。否则明智地使用numpy函数就像这样:** myNumpyList.reshape((5,240,320,1))** – Wontonimo

+0

hmm。我尝试过使用** input_batches = np.expand_dims(input_batches,axis = 4)**,但它不起作用。 Tensorflow剧照看到了错误的形状。但是,如果我将轴更改为3,则尺寸将出现在第3位(5,240,1,320)。当轴为4时,尺寸将不会出现在我想要的第5个位置(5,240,320,1)。轴= 1或2也适用,但不是4或-1。 –