У меня есть простой автоэнкодер DNN с 4 слоями свертки, за которыми следуют 4 слоя деконволюции.
import tensorflow.contrib.layers as lays
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=4, padding='SAME')
conv4 = lays.conv2d(conv3, 100, [5, 5], stride=4, padding='SAME') #shape (None,1,1,100)
dconv1 = lays.conv2d_transpose(conv4, 16, [5, 5], stride=4, padding='SAME')
dconv2 = lays.conv2d_transpose(dconv1, 32, [5, 5], stride=4, 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.tanh) #shape (64,64,1)
Здесь входные данные представляют собой (64,64) изображения в оттенках серого, и автоэнкодер восстанавливает то же входное изображение ввыходной слой (dconv4).
Обратите внимание, что целью этого автоэнкодера является не сегментирование, а представление изображения (64x64) в виде уникального тензора в форме (1,1100) с минимальными потерями.
КакВы можете видеть, что тензор conv4 имеет вид (Нет, 1,1 100), что мне и нужно.
После обучения этот автоэнкодер отлично работает для тестовых изображений.
Однако,Я заинтересован в том, чтобы разделить обученное DNN на части свертки и деконволюции, взять часть деконволюции, ввести свой собственный (None, 1,1100) тензор в слой dconv1 и наблюдать результат на dconv4.
Как мнепередать свой собственный вклад в тензор в середине нейронной сети (conv4)?