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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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