Изменение порядка выходного слоя

Я построил CNN с использованием keras.

Мой результат в форме:

[[a1,b1,c1,d1],
 [a2,b2,c2,d2],
 [a3,b3,c3,d3]
]

Однако есть способ изменить порядок выходного слоя так, чтобы результат был

[[a2,b2,c2,d2],
 [a1,b1,c1,d1],
 [a3,b3,c3,d3]
]

Учитывая, что у меня уже есть прежний выход? CNN выводит первый пример, затем я хочу, чтобы он переупорядочил вывод второго примера.

мой CNN заканчивается на

x = Conv2D(1024, (3,3), strides=(1,1), padding='same', name='conv_22', use_bias=False)(x)
x = BatchNormalization(name='norm_22')(x)
x = LeakyReLU(alpha=0.1)(x)
x = Flatten()(x)
x = Dense(15 * 4, activation='relu')(x)
x = LeakyReLU(alpha=0.1)(x)
x = Reshape((15, 4), name='predictions')(x)
0
0
155
1

Ответы 1

Осторожность: Имейте в виду, что модель всегда будет сравнивать input1 с ouput1; вход2 с выходом2; и так далее. Это поведение Keras, которое нельзя изменить.

Вы можете изменить порядок первого измерения с помощью K.gather().

import keras.backend as K

reorder = [1,0,2] #the order of the indices, according to your example

reorderingLayer = Lambda(lambda x: K.gather(x,reorder))

вот чего я пытаюсь достичь, чтобы сравнить input1 с output2, я хочу поместить output1 в первую позицию, чтобы его можно было сравнить - Означает ли u, что когда я переупорядочиваю вывод, следующая итерация будет сравниваться outpu2 с input1 bcs output2 is на первой позиции? Или иным образом

Darlyn 11.04.2018 14:40

Вы хотите менять порядок на каждой итерации?

Daniel Möller 11.04.2018 14:42

Я пытаюсь достичь следующего: рассчитать долговую расписку для каждой комбинации вывода / ввода (меток). Затем, если, например, output2 имеет самую большую долговую расписку с input1, переместите output2 в первую позицию, чтобы следующая итерация output2 сравнивалась с input1

Darlyn 11.04.2018 14:44

Тогда это совершенно новый вопрос ... вы должны делать это только с numpy, вне модели. Создавайте циклы и итерации самостоятельно и используйте только одну эпоху в методе подгонки. (Или даже model.train_on_batch, если у вас всего одна партия -> data.length == batch_size)

Daniel Möller 11.04.2018 14:49

В настоящее время то, что я делаю, похоже на то, что я делаю с INPUT, но я хотел бы попробовать это и с выходом, я рассчитываю IOU, а затем переназначаю вход в соответствии с выходом. Однако это, похоже, дает странный результат, мой CNN может только научиться находить максимум 2 объекта (они не найдены на 100%, но найдены 2 коробки)

Darlyn 11.04.2018 14:50

Другие вопросы по теме