keras训练数据形状与测试数据形状不同,但我使用的是全卷积网络

我在使用keras。当我训练我的网络时,我使用了256*256*9的图像形状,但我没有固定高度和宽度。我的网络是一个全卷积网络。但当我用512*512*9的图像进行测试时,由于形状问题,测试失败了。看起来keras的函数无法更改。我真的不知道如何解决这个问题,以下是错误日志:

Traceback (most recent call last):   File "test9.py", line 19, in <module>        predict = model.predict(img)   File "/home/dingyuyang/.conda/envs/tensorflow/lib/python3.5/site-packages/keras/engine/training. py", line 1147, in predict        x, _, _ = self._standardize_user_data(x)   File "/home/dingyuyang/.conda/envs/tensorflow/lib/python3.5/site-packages/keras/engine/training. py", line 749, in _standardize_user_data        exception_prefix='input')   File  "/home/dingyuyang/.conda/envs/tensorflow/lib/python3.5/site-packages/keras/engine/training_ utils.py", line 137, in standardize_input_data str(data_shape)) ValueError: Error when checking input: expected input_1 to have shape (256, 256, 9) but got array with shape (512, 512, 9)

这是我的测试代码:

model = load_model("weight9.h5")img = scipy.io.loadmat('./bike_r_6.mat')img = img['imghor'].astype("float32")img = img / 255img = np.transpose(img, (1, 2, 0))img = np.reshape(img,(1,)+img.shape)predict = model.predict(img)print(predict.shape)predict[predict>=0.7]=1predict[predict<0.7]=0predict = np.squeeze(predict)predict = np.transpose(predict, (2, 0, 1))name = '92mask.mat'scipy.io.savemat(name, {'x': predict})

这是我的主网络代码:

def unet(pretrained_weights = None,input_size = (None,None,None)):    inputs = Input(input_size)    conv1 = Conv2D(64, 3, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(inputs)    conv1 = Conv2D(64, 3, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(conv1)    pool1 = MaxPooling2D(pool_size=(2, 2))(conv1)    conv2 = Conv2D(128, 3, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(pool1).......

输入形状是从main()中填充的:

h, w ,d= org.shapemodel = unet(input_size = (h,w,d))

回答:

这很正常,因为它无法工作。您的模型输入形状应该是256*256*9,但您在预测时输入的是512*512*9。当您在model = unet(input_size = (h,w,d))中创建模型时,您设置了输入的形状为h,w,d。因此,训练示例在fit中和验证/测试在predict中应遵循相同的形状。

如果您有不同的形状,您应该提供一个策略,比如裁剪或重塑您的模型输入

Related Posts

在使用k近邻算法时,有没有办法获取被使用的“邻居”?

我想找到一种方法来确定在我的knn算法中实际使用了哪些…

Theano在Google Colab上无法启用GPU支持

我在尝试使用Theano库训练一个模型。由于我的电脑内…

准确性评分似乎有误

这里是代码: from sklearn.metrics…

Keras Functional API: “错误检查输入时:期望input_1具有4个维度,但得到形状为(X, Y)的数组”

我在尝试使用Keras的fit_generator来训…

如何使用sklearn.datasets.make_classification在指定范围内生成合成数据?

我想为分类问题创建合成数据。我使用了sklearn.d…

如何处理预测时不在训练集中的标签

已关闭。 此问题与编程或软件开发无关。目前不接受回答。…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注