我是张力流初学者,所以请耐心等待。 现在我正在尝试修改现有的用于创建超分辨率图像的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)
为什么张量流占位符的通道索引似乎从1开始,而分辨率索引从0开始?
我确信将会有更多问题,例如调整过滤器,但这就是我现在被困住的地方。
答案 0 :(得分:0)
您需要了解代码。我相信问题可能会更深层次。由于信息有限,我假设您使用的是network.py
。在那里,我们在第16行看到了这一点:
self.inputs = tf.placeholder(
tf.float32, [batch_size, dimensions[1], dimensions[0], 3], name='input_images'
)
深度维度已经硬编码为3
。您可能还需要编辑它,可能还有许多其他内容。
作为一个警告,大多数超级分辨率的CNN使用小的补丁大小。绝对不是(240, 320)
,我怀疑由于批量很小,很难收敛。
答案 1 :(得分:0)
如果你有一个形状张量[5,240,320]你可以用这一个命令重塑它[5,240,320,1]
correctSizedTensor = tf.reshape( wrongSizedTensor, [5,240,320,1] )