Nano Hash - криптовалюты, майнинг, программирование

Автоэнкодер работает для MNIST, но дает сбой для изображений большего размера

Я пытался следовать руководству по Keras, чтобы создать автоэнкодер для MNIST. Автоэнкодер сработал, а затем я попытался изменить изображения и, следовательно, форму ввода с 28, 28, 1 на 150, 150, 3, и я получаю следующую ошибку:

ValueError: Ошибка при проверке цели: ожидалось, что conv2d_6 будет иметь форму (148, 148, 1), но получил массив с формой (150, 150, 3)

Архитектура автоэнкодера:

input_img = Input(shape=(150, 150, 3))

x = Conv2D(16, (3, 3), activation='relu', padding='same')(input_img)
x = MaxPooling2D((2, 2), padding='same')(x)
x = Conv2D(8, (3, 3), activation='relu', padding='same')(x)
x = MaxPooling2D((2, 2), padding='same')(x)
x = Conv2D(8, (3, 3), activation='relu', padding='same')(x)
encoded = MaxPooling2D((2, 2), padding='same')(x)

x = Conv2D(8, (3, 3), activation='relu', padding='same')(encoded)
x = UpSampling2D((2, 2))(x)
x = Conv2D(8, (3, 3), activation='relu', padding='same')(x)
x = UpSampling2D((2, 2))(x)
x = Conv2D(16, (3, 3), activation='relu')(x)
x = UpSampling2D((2, 2))(x)
decoded = Conv2D(1, (3, 3), activation='sigmoid', padding='same')(x)

autoencoder = Model(input_img, decoded)
autoencoder.compile(optimizer=Adam(0.01), loss='binary_crossentropy')

Настройки поезда:

autoencoder.fit(x_train, y_train,
                epochs=50,
                batch_size=512,
                shuffle=True,
                validation_data=(x_test, y_test))

Мои формы данных следующие:

x_train shape: (4022, 150, 150, 3)
y_train shape: (4022, 150, 150, 3)
x_test shape: (447, 150, 150, 3)
y_test shape: (447, 150, 150, 3)

Совместная ссылка на мою рабочую область:

https://colab.research.google.com/drive/1C8RX7OYS2BXaHJbr6V


Ответы:


1

Используйте этот код, и он будет работать

input_img = Input(shape=(150, 150, 3))
x = Conv2D(16, (3, 3), activation='relu', padding='same')(input_img)
x = MaxPooling2D((2, 2), padding='same')(x)
x = Conv2D(8, (3, 3), activation='relu', padding='same')(x)
x = MaxPooling2D((2, 2), padding='same')(x)
x = Conv2D(8, (3, 3), activation='relu', padding='same')(x)
encoded = MaxPooling2D((2, 2), padding='same')(x)
x = Conv2D(8, (3, 3), activation='relu', padding='same')(encoded)
x = UpSampling2D((2, 2))(x)
x = Conv2D(8, (3, 3), activation='relu', padding='same')(x)
x = UpSampling2D((2, 2))(x)
x = ZeroPadding2D(padding=(1, 1), input_shape=(148, 148, 16))(x)
x = Conv2D(16, (3, 3), activation='relu')(x)
x = UpSampling2D((2, 2))(x)
decoded = Conv2D(3, (3, 3), activation='sigmoid', padding='valid')(x)
autoencoder = Model(input_img, decoded)
autoencoder.compile(optimizer=Adam(0.01), loss='binary_crossentropy')

Я добавил нулевое заполнение и изменил свертку последнего слоя на вывод 3 каналов.

Будет напечатано следующее резюме

Layer (type)                 Output Shape              Param #   
=================================================================
input_10 (InputLayer)        (None, 150, 150, 3)       0         
_________________________________________________________________
conv2d_58 (Conv2D)           (None, 150, 150, 16)      448       
_________________________________________________________________
max_pooling2d_25 (MaxPooling (None, 75, 75, 16)        0         
_________________________________________________________________
conv2d_59 (Conv2D)           (None, 75, 75, 8)         1160      
_________________________________________________________________
max_pooling2d_26 (MaxPooling (None, 38, 38, 8)         0         
_________________________________________________________________
conv2d_60 (Conv2D)           (None, 38, 38, 8)         584       
_________________________________________________________________
max_pooling2d_27 (MaxPooling (None, 19, 19, 8)         0         
_________________________________________________________________
conv2d_61 (Conv2D)           (None, 19, 19, 8)         584       
_________________________________________________________________
up_sampling2d_25 (UpSampling (None, 38, 38, 8)         0         
_________________________________________________________________
conv2d_62 (Conv2D)           (None, 38, 38, 8)         584       
_________________________________________________________________
up_sampling2d_26 (UpSampling (None, 76, 76, 8)         0         
_________________________________________________________________
zero_padding2d_4 (ZeroPaddin (None, 78, 78, 8)         0         
_________________________________________________________________
conv2d_63 (Conv2D)           (None, 76, 76, 16)        1168      
_________________________________________________________________
up_sampling2d_27 (UpSampling (None, 152, 152, 16)      0         
_________________________________________________________________
conv2d_64 (Conv2D)           (None, 150, 150, 3)       435       
=================================================================
Total params: 4,963
Trainable params: 4,963
Non-trainable params: 0
_________________________________________________________________
None
30.07.2018

2

Я думаю, что ваш последний слой декодирования должен декодировать до трех каналов, а не до одного.

decoded = Conv2D(1, (3, 3), activation='sigmoid', padding='same')(x)

должно быть

decoded = Conv2D(3, (3, 3), activation='sigmoid', padding='same')(x)

no?

30.07.2018
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..