Установка
Я создаю автокодер с тензором для изображений. Мои изображения составляют около 30 пикселей по длине и ширине. Я использую 5 слоев:Tensorflow autoencoder: Как получить репрезентативный результат?
- входной слой
- слой энкодер с 256 нейронов с линейными функциями. (Этот слой должен функционировать как препроцессорный PCA.)
- Уровень кодировщика с 128 нейронами с сигмовидными функциями.
- Декодерный слой с 256 нейронами с сигмовидными функциями.
- Декодер/выходной слой с таким количеством нейронов, что и вход с линейной функцией.
Все слой использует уклоны и определяется как этот
layer_1 = tf.nn.sigmoid(tf.add(
tf.matmul(x, tf.Variable(tf.random_normal([n_input, n_hidden_1]))),
tf.Variable(tf.random_normal([n_hidden_1]))
))
Моей стоимость определяются
cost = tf.reduce_mean(tf.div(tf.reduce_sum(tf.pow(y_true - y_pred, 2)), 2))
и я использовал RMSPropOptimizer
с начала скоростью 0.01
обучения.
Я обучил автокодерам около 250000 изображений. Ниже я показываю результаты тестовых данных, с которыми я не тренировался. Верхняя строка всегда показывает входные изображения, нижняя строка всегда показывает выходные изображения.
Я использовал автоассоциатор удовлетворительного по данным MNIST (ячейки массива являются значением от 0-1):
Я использовал автоассоциатор удовлетворительный на фотографиях, которые я взял себя (ячейки массива являются значением от 0-100):
Где среднеквадратичные ошибки
rmse = tf.sqrt(tf.reduce_mean(tf.square(tf.sub(y_true, y_pred)), axis=1))
являются, как и следовало ожидать - выше первых трех фотографий (Darke Нед, побелевшие, поставить крест), и ниже для неизменных фотографий:
17.5, 29.6, 12.9, 11.7, 11.2, 11.7, 7.3, 7.1, 7.1, 8.1
Но автоассоциатор не работает удовлетворительно для текстурных изображений (ячеек массива являются 0-1). Во-первых, я использовал RMSPropOptimizer
и получил
С моей стоимости, где довольно высока во время тренировки и не изменял, я последовал совету от https://stackoverflow.com/a/40956761/4533188 и используемого AdamOptimizer
. Действительно, я получил лучшие результаты с
Хотя затраты ниже, они по-прежнему неизменными в течение эпох:
Также вывод изображения довольно темно.Я считаю, что это может также причина, почему мои rmse
s являются не как я бы ожидать:
0.4642, 0.2669, 0.4976, 0.4378, 0.4753, 0.4688, 0.4615, 0.4571, 0.4691, 0.4487
Пожалуйста, обратите внимание, что я хотел бы ожидать, что rmse
s высок для первого изображения в связи с точкой в центре и второе изображение, поскольку оно затемнено. Я думаю, причина, по которой rmse
s не так надеялась, потому что выходные изображения настолько темные.
Вопросы
- Почему расходы не уменьшаются в течение эпох и что я могу сделать, чтобы получить это происходит?
- Почему выходные изображения настолько темные и что я могу сделать, чтобы они лучше отображали входные изображения?
- Как я могу получить
rmse
?
1. Какова ваша рекомендация для слоев, если я хочу, чтобы выход был линейным, и чтобы первый скрытый слой был линейным? 3. Что вы рекомендуете для сигмовидных, линейных, ReLU? 4. Что вы имеете в виду? Поделитесь ими с SO? – Make42
2. Почему я должен использовать ReLU вместо сигмоида? – Make42
ReLU оказалось легче тренироваться, чем сигмовидный. Я рекомендую вам изучить этот очень хороший ресурс, чтобы быть успешным в развитии нейронных сетей; deeplearningbook.org – fabrizioM