Я обучил бинарную модель классификации с CNN, и вот мой код
model = Sequential()
model.add(Convolution2D(nb_filters, kernel_size[0], kernel_size[1],
border_mode='valid',
input_shape=input_shape))
model.add(Activation('relu'))
model.add(Convolution2D(nb_filters, kernel_size[0], kernel_size[1]))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=pool_size))
# (16, 16, 32)
model.add(Convolution2D(nb_filters*2, kernel_size[0], kernel_size[1]))
model.add(Activation('relu'))
model.add(Convolution2D(nb_filters*2, kernel_size[0], kernel_size[1]))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=pool_size))
# (8, 8, 64) = (2048)
model.add(Flatten())
model.add(Dense(1024))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(2)) # define a binary classification problem
model.add(Activation('softmax'))
model.compile(loss='categorical_crossentropy',
optimizer='adadelta',
metrics=['accuracy'])
model.fit(x_train, y_train,
batch_size=batch_size,
nb_epoch=nb_epoch,
verbose=1,
validation_data=(x_test, y_test))
И здесь я хочу получить выходные данные каждого слоя, как TensorFlow, как я могу это сделать?
источник
K.function([inp]+ [K.learning_phase()], [out])
значит в вашем коде?np.random.random(input_shape)[np.newaxis,...]
также можно записать какnp.random.random(input_shape)[np.newaxis,:]
K.function
здесь , и предсказать , использует его в петлю предсказать здесь . Прогнозировать циклы по размеру пакета (если он не установлен по умолчанию 32), но это для смягчения ограничений памяти GPU. Так что я не уверен, почему вы наблюдаетеmodel.predict
быстрее.С https://keras.io/getting-started/faq/#how-can-i-obtain-the-output-of-an-intermediate-layer
Один простой способ - создать новую модель, которая будет выводить интересующие вас слои:
В качестве альтернативы, вы можете создать функцию Keras, которая будет возвращать выходные данные определенного слоя с определенным вводом, например:
источник
layer_output = get_3rd_layer_output([X, 0])[0]
иlayer_output = get_3rd_layer_output([X, 1])[0]
Документах упомянуть режим поезда и тестовый режимОсновываясь на всех хороших ответах этой темы, я написал библиотеку для извлечения выходных данных каждого слоя. Он абстрагирует всю сложность и был разработан, чтобы быть максимально удобным для пользователя:
https://github.com/philipperemy/keract
Он обрабатывает почти все крайние случаи
Надеюсь, поможет!
источник
Следующее выглядит очень просто для меня:
Выше находится тензорный объект, поэтому вы можете изменить его, используя операции, которые можно применить к тензорному объекту.
Например, чтобы получить форму
model.layers[idx].output.get_shape()
idx
это индекс слоя, и вы можете найти его изmodel.summary()
источник
Я написал эту функцию для себя (в Jupyter), и она была вдохновлена ответом indraforyou . Он отобразит все выходные данные слоя автоматически. Ваши изображения должны иметь форму (x, y, 1), где 1 обозначает 1 канал. Вы просто вызываете plot_layer_outputs (...) для построения графика.
источник
От: https://github.com/philipperemy/keras-visualize-activations/blob/master/read_activations.py
источник
Хотел добавить это в качестве комментария (но не достаточно высокого представителя) к ответу @ indraforyou, чтобы исправить проблему, упомянутую в комментарии @ mathtick. Для того, чтобы избежать
InvalidArgumentError: input_X:Y is both fed and fetched.
исключения, просто замените строкуoutputs = [layer.output for layer in model.layers]
сoutputs = [layer.output for layer in model.layers][1:]
, т.е.адаптируя минимальный рабочий пример indraforyou:
PS мои попытки попробовать такие вещи, как
outputs = [layer.output for layer in model.layers[1:]]
не сработало.источник
keras
модели). Слой встраивания ваших слов эквивалентен входному слою в приведенном здесь примере.Предполагая, что у вас есть:
1- Керас предварительно обучен
model
.2- Введите
x
как изображение или набор изображений. Разрешение изображения должно соответствовать размеру входного слоя. Например, 80 * 80 * 3 для 3-канального (RGB) изображения.3- Имя выхода,
layer
чтобы получить активацию. Например, слой "flatten_2". Это следует включить вlayer_names
переменную, представляющую собой название слоев данногоmodel
.4
batch_size
- необязательный аргумент.Затем вы можете легко использовать
get_activation
функцию, чтобы получить активацию выходаlayer
для данного входаx
и предварительно обученногоmodel
:источник
Если у вас есть один из следующих случаев:
InvalidArgumentError: input_X:Y is both fed and fetched
Вам необходимо сделать следующие изменения:
outputs
переменнуюfunctors
петлеМинимальный пример:
источник
[x1, x2, xn, 1]
? Мой x1 не определен, и я хотел бы понять, что вы там определяете.x1
иx2
являются входными данными модели. Как уже было сказано, у вас есть 2 входа на вашу модель.Ну, другие ответы очень полны, но есть очень простой способ «увидеть», а не «получить» формы.
Просто сделай
model.summary()
. Он напечатает все слои и их выходные формы. «None» значения будут указывать на переменные размеры, а первое измерение будет размером пакета.источник