Моя модель обучена на цифровых изображениях (MNIST dataset
). Я пытаюсь распечатать вывод второго слоя моей сети - массив из 128 чисел.
После прочтения много примеров - например, это , и это , или это .
Мне не удалось сделать это в моей собственной сети. Ни одно из решений не работает по моему собственному алгоритму.
Ссылка на Colab: https://colab.research.google.com/drive/1MLbpWJmq8JZB4_zKongaHP2o3M1FpvAv?fbclid=IwAR20xRz2i6sFS-Nm6Xwfk5hztdXOuxY4tZaDRXxAHa9B9
Я получил много разных сообщений об ошибках. Я пытался справиться с каждым из них, но не мог понять это самостоятельно.
Что мне не хватает? Как вывести Второй слой?
Если моя форма (28,28)
- какой должен быть тип и значение input_shape
?
Неудачные испытания и ошибки, например:
(1)
for layer in model.layers:
get_2nd_layer_output = K.function([model.layers[0].input],[model.layers[2].output])
layer_output = get_2nd_layer_output(layer)[0]
print('\nlayer output: get_2nd_layer_output=, layer=', layer, '\nlayer output: get_2nd_layer_output=', get_2nd_layer_output)
Ошибка типа: входные данные должны быть списком или кортежем.
(2)
input_shape=(28, 28)
inp = model.input # input placeholder
outputs = [layer.output for layer in model.layers] # all layer outputs
functor = K.function([inp, K.learning_phase()], outputs ) # evaluation function
# Testing
test = np.random.random(input_shape)[np.newaxis,...]
layer_outs = functor([test, 0.])
print('layer_outs',layer_outs)
tenorflow.python.framework.errors_impl.FailedPreconditionError: Ошибка при чтении переменной ресурса dens_1 / bias из Container: localhost. Это может означать, что переменная была неинициализирована. Не найдено: Контейнер localhost не существует. (Не удалось найти ресурс: localhost / плотность_1 / смещение) [[{{узел плотность_1 / BiasAdd / ReadVariableOp}}]]
источник
Ответы:
Похоже, вы смешиваете старые keras (до tenorflow 2.0:)
import keras
и новые keras (from tensorflow import keras
).Старайтесь не использовать старые keras вместе с tenorflow> = 2.0 (и не ссылаться на старую документацию, как в первой ссылке), так как ее легко спутать с новой (хотя ничего строго нелогичного):
Поведение будет очень нестабильным, смешивая эти две библиотеки.
Как только это будет сделано, используя ответ из того, что вы пытались, m - это ваша модель, и
my_input_shape
- это форма ваших моделей, то есть форма одного изображения (здесь (28, 28) или (1, 28, 28), если у вас есть партии):Если у вас есть одно изображение,
img
вы можете написать прямоnew_temp_model.predict(img)
источник
input_shape=(28, 28)
my_input_data
конечно, должны заменить свои собственные данные(Предполагая TF2)
Я думаю, что самым простым подходом было бы назвать ваши слои, а затем вызывать их со стандартным вводом, чтобы ваша модель могла выглядеть так
Затем просто создайте вход и
output_of_hidden
это то, что вы ищетеАльтернативный подход
Если вы ищете более общее решение, предполагая, что ваша модель является последовательной, вы можете использовать
index
ключевое словоget_layer
вроде этогоВ конце этого цикла
my_input
должно быть то, что вы ищетеисточник
output_of_hidden.numpy()
и он преобразует его в массив numpy