我正在使用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))
答案 0 :(得分:0)
那是不正常的,这很正常。模型的输入形状应为256 * 256 * 9,但您要在预测中采用512 * 512 * 9。
在model = unet(input_size = (h,w,d))
中创建模型时,您将输入的形状设置为h,w,d。因此, fit 中的任何训练示例以及 predict 中的验证/测试都应遵循相同的形式。
如果形状不同,则应提供一种策略,例如裁剪或调整模型输入的形状