В первом случае проблема заключается в том, что вы используете четное число для subsample
(в настоящее время «шагает») и нечетное число для размера изображения.
При subsample=(2,2)
вы обязательно уменьшите вдвое размер изображения, поэтому обратная свертка обязательно удвоит размер изображения.Здесь вы ничего не можете сделать, если только вы не начнете работать с 8x8 или не удалите subsample
.(Если вы начнете слишком много играть с комбинациями размера ядра, режима границы и подвыборки, вы можете достичь 7 x 7, но помимо запутанной математики, это может также создать несбалансированное изображение, больше слева или больше справаНапример, это может повлиять на результаты, когда ваши изображения такие маленькие)
Во втором случае результат такой же, потому что вы используете border_mode='same'
.Но если вы удалите это, ваши размеры увеличатся с 8x8 до 6x6.Вам понадобится фильтр размером (2,2), чтобы потерять только один пиксель.
Предлагаю перейти на Керас 2.
Пример:
#but I suggest you remove the strides
d6 = Conv2DTranspose(128, (5,5), strides = (2,2), activation = 'relu', padding='same', kernel_initializer='uniform')
#'valid' is the default value, but I wrote it so you see the new name of "border_mode"
d6 = Conv2D(128,(3,3), activation='relu', padding='valid')(d6)