Это слишком много работы, чтобы достичь того, чего вы хотите.Могу поспорить, что вы ищете, это Autoencoder
.Автоэнкодеры используются для генерации точно такого же ввода на выходном слое при обработке ввода через набор уровней кодирования и декодирования.
Идея состоит в том, чтобы уменьшить размер входных данных в конце уровней кодирования и при этом использовать тензор, уменьшенный по размерам, для эффективной реконструкции входных данных в выходном слое с минимальными потерями информации.
Ниже приведен автокодер, который я построил для восстановления входного изображения на выходном слое.
def autoencoder(inputs):
# encoder
# 32 x 32 x 1 -> 16 x 16 x 64
# 16 x 16 x 64 -> 8 x 8 x 32
# 8 x 8 x 32 -> 4 x 4 x 16
# 4 x 4 x 16 -> 1 x 1 x 100
conv1 = lays.conv2d(inputs, 64, [5, 5], stride=2, padding='SAME')
conv2 = lays.conv2d(conv1, 32, [5, 5], stride=2, padding='SAME')
conv3 = lays.conv2d(conv2, 16, [5, 5], stride=2, padding='SAME')
conv4 = lays.conv2d(conv3, 100, [5, 5], stride=4, padding='SAME')
# decoder
# 1 x 1 x 100 -> 4 x 4 x 16
# 4 x 4 x 16 -> 16 x 16 x 32
# 16 x 16 x 32 -> 32 x 32 x 64
# 32 x 32 x 64 -> 64 x 64 x 1
# dconv1 = lays.conv2d_transpose(conv4, 16, [5, 5], stride=4, padding='SAME')
latent_ph = tf.placeholder_with_default(conv4, [None, 1, 1, 100], name="latent_ph")
dconv1 = lays.conv2d_transpose(latent_ph, 16, [5, 5], stride=4, padding='SAME')
dconv2 = lays.conv2d_transpose(dconv1, 32, [5, 5], stride=2, padding='SAME')
dconv3 = lays.conv2d_transpose(dconv2, 64, [5, 5], stride=2, padding='SAME')
dconv4 = lays.conv2d_transpose(dconv3, 1, [5, 5], stride=2, padding='SAME', activation_fn=tf.nn.relu)
# W_conv1 = weights([5, 5, 1, 64])
# conv1 = conv2d(inputs, W_conv1, stride=(2,2))
return dconv4, latent_ph, conv4
tf.placeholder_with_default()
позволяет вам подавать тензор извне во время тестирования.Поэтому, если у вас сокращенный формат ввода, вы можете скорректировать приведенный тензор до tf.placeholder_with_default()
тензор и наблюдать за выводом.
Возвращаясь к вашему вопросу, не имеет значения, является ли это глубокая сеть,мелкая сеть, CNN, полностью подключенный NN, он должен работать при реализации одного из этих автоэнкодеров.Единственное изменение, которое вам нужно будет сделать, - это сделать labels = inputs
.