Форма Keras Traindata отличается от формы TestData, но я использую полную сеть конв - PullRequest
0 голосов
/ 14 марта 2019

Я использую керас. Когда я тренировал свою сеть, я использовал 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)
.......

Импульсная форма заполнена из main ():

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

1 Ответ

0 голосов
/ 15 марта 2019

Это очень нормально, что это не работает.Форма ввода вашей модели должна быть 256 * 256 * 9, но вы нажимаете 512 * 512 * 9 в прогнозе.Когда вы создаете свою модель в model = unet(input_size = (h,w,d)), вы устанавливаете форму ввода h, w, d.Таким образом, любые обучающие примеры в fit и валидации / тесте в Foret должны иметь одинаковую форму.или изменить форму ввода вашей модели

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...