Объединение только нескольких каналов в кератах с использованием объединения - PullRequest
0 голосов
/ 26 апреля 2019

Я бы объединял только выбранные каналы в кератах, но когда я это делал, это отображалось как ошибка.

Я пытался получить интересующие каналы и использовал функцию объединения для объединения двух выходов.

def cifar10ClassifierTransfer(input_img, conv2_high):

  # Add additional inputs to 

  conv1_1 = (Conv2D(32, (3,3), padding='same', kernel_regularizer=regularizers.l2(weight_decay), input_shape=x_train.shape[1:], activation='elu'))(input_img)
  conv1_2 = BatchNormalization()(conv1_1)
  conv2_1 = (Conv2D(32, (3,3), padding='same', activation= 'elu',kernel_regularizer=regularizers.l2(weight_decay)))(conv1_2)
  conv2_high = conv2_high[:,:,:,[1,2,3]]
  concat_layer = keras.layers.merge.Concatenate(axis=3)([conv2_1,conv2_high])

  flat = Flatten()(concat_layer)
  out = Dense(num_classes, activation='softmax')(flat)

  return out 

Я ожидал, что количество каналов увеличится.Если я не указываю, какие каналы я хочу объединить, он работает нормально, но когда я выбираю каналы, он выдает следующую ошибку

TypeError: Only integers, slices (`:`), ellipsis (`...`), tf.newaxis (`None`) and scalar tf.int32/tf.int64 tensors are valid indices, got [1, 2, 3]

Как мы можем выбрать каналы, которые я хочу объединить, а не объединить все?

1 Ответ

0 голосов
/ 26 апреля 2019

Вы можете использовать срез, как указано в ошибке.

conv2_high можно переписать как:

conv2_high = conv2_high[:,:,:,1:4]

Вы также можете использовать tf.gather_ndно описанный выше подход более читабелен для ИМО.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...