keras traindata形状与testdata形状不同,但我使用完整的转换网络

时间:2019-03-14 14:52:29

标签: python machine-learning keras conv-neural-network

我正在使用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/kera

s/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 / 255
img = np.transpose(img, (1, 2, 0))
img = np.reshape(img,(1,)+img.shape)
predict = model.predict(img)
print(predict.shape)
predict[predict>=0.7]=1
predict[predict<0.7]=0
predict = 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)
.......

imputshape由main()填充:

h, w ,d= org.shape
model = unet(input_size = (h,w,d))

1 个答案:

答案 0 :(得分:0)

那是不正常的,这很正常。模型的输入形状应为256 * 256 * 9,但您要在预测中采用512 * 512 * 9。 在model = unet(input_size = (h,w,d))中创建模型时,您将输入的形状设置为h,w,d。因此, fit 中的任何训练示例以及 predict 中的验证/测试都应遵循相同的形式。

如果形状不同,则应提供一种策略,例如裁剪或调整模型输入的形状