在Keras中加载与训练大小不同的图像

在Keras中加载与训练大小不同的图像,keras,Keras,我在CNN工作,负责超分辨率。我需要从图像中提取补丁,然后在这些小补丁(即41x41)上进行训练 但是,在预测图像时,图像的大小要比面片大。但是Keras不允许我预测比训练图像更大的图像 我读过。我尝试了这种方法,将None放入我的网络输入形状,然后加载权重。但是,当谈到这一行时:c1=PReLU()(c1),我得到一个错误:nt()参数必须是字符串、类似字节的对象或数字,而不是“NoneType”。代码如下所示 我如何解决这个问题?我将Keras与tensorflow后端一起使用。我没有完全连

我在CNN工作,负责超分辨率。我需要从图像中提取补丁,然后在这些小补丁(即41x41)上进行训练

但是,在预测图像时,图像的大小要比面片大。但是Keras不允许我预测比训练图像更大的图像

我读过。我尝试了这种方法,将
None
放入我的网络输入形状,然后加载权重。但是,当谈到这一行时:
c1=PReLU()(c1)
,我得到一个错误:
nt()参数必须是字符串、类似字节的对象或数字,而不是“NoneType”
。代码如下所示

我如何解决这个问题?我将Keras与tensorflow后端一起使用。我没有完全连接的层,所有层都是带有relu的Conv2D,除了下面的代码片段,都是c1的PReLU

谢谢

input_shape = (None,None,1)
x = Input(shape = input_shape)
c1 = Convolution2D(64, (3,3), init = 'he_normal', padding='same', name='Conv1')(x)
c1 = PReLU()(c1)
#............................
output_img = keras.layers.add([x, finalconv])
model = Model(x, output_img)
Keras不允许我预测一张比照片更大的照片 训练图像

这是错误的,当网络设计正确时,
keras
允许您这样做

但是,当涉及到这一行:c1=PReLU()(c1)时,我得到 错误:nt()参数必须是字符串、类似字节的对象或 编号,而不是“非类型”

由于您的输入形状包含
None
,因此可能会出现此错误。实际上,如果您之前为
PReLU
(默认值
shared\u axes=None
)设置了
shared\u axes=[1,2]
),则不会看到此错误

因此,这里真正的问题是,
PReLU
的参数,以前只为41x41输入设置,但现在被要求为任意输入大小工作

最好的解决方案是直接使用输入shape=
(None,None,3)
训练新模型


如果不关心可能的降级,则可以加载预训练模型的所有层权重,但
PReLU
层除外。然后手动计算适当的
PReLU
参数,这些参数可以跨
共享轴=[1,2]
共享,并将其用作新的
PReLU
参数。

Hi,@user36624。谢谢你的回答。您好,如果我将输入形状保持为(41,41,1),但更改PReLU输入参数,即
input\u shape=(41,41,1)
c1=PReLU(shared\u axes=[1,2])(c1)
,然后重新训练网络,这样可以吗?您可以保持
input\u shape=(无,无,1)