Определение функции Keras - PullRequest
0 голосов
/ 08 июня 2018

Я недавно начал изучать глубокое обучение и CNN.Я наткнулся на следующий код, который определяет простой CNN.

Может кто-нибудь помочь мне понять, как работают эти строки:

  1. loss = layer_output[:, :, :, 0] - Каков результат этого?Мой вопрос в том, что сеть еще не обучена.Веса [Ядра] еще не рассчитаны.Итак, какие данные он собирается вернуть !!0 представляет первое ядро?

  2. iterate = K.function([input_img], [loss, grads]) - На сайте Keras не так много документации.Я понимаю, что iterate - это функция, которая принимает входной тензор и возвращает список тензоров, первый из которых loss, а второй * grads.Но они определены в другом месте!

Определите входное изображение с этими размерами:

img_data = np.random.uniform(size=(1, 250, 250, 3))  

Существует простое CNN, которое имеет один сверточный слой.Он использует два ядра 3 X 3.

input = Input(shape=250, 250, 3,), name='input_1')

First_Conv2D = Conv2D(2, kernel_size=(3, 3), padding="same", name='conv2d_1', activation='relu')(input)
flat = Flatten(name='flatten_1')(First_Conv2D)
output = Dense(2, name='dense_1', activation='softmax')(flat)

model = Model(inputs=[input], outputs=[output])

layer_dict = dict([(layer.name, layer) for layer in model.layers[0:]])
layer_output = layer_dict['conv2d_1'].output

input_img = model.input

# Calculate loss and gradient.
loss = layer_output[:, :, :, 0]
grads = K.gradients(loss, input_img)[0]

# Define a Keras function
iterate = K.function([input_img], [loss, grads])

# Call iterate function 
loss_value, grads_value = iterate([img_data])

Спасибо.

1 Ответ

0 голосов
/ 08 июня 2018

Это похоже на неприятное вскрытие Keras как API.Я считаю, что это приводит к большей путанице, а не к глубокому изучению.В любом случае, отвечая на ваши вопросы:

  1. Все тензоры символические , что означает, что до тех пор, пока мы не запустим сеанс, они не содержат никаких значений.Вместо этого они определяют ориентированный граф вычислений.loss = layer_output[:,:,:,0] является операцией среза, которая берет первый элемент последнего измерения, возвращая другой тензор с 3 измерениями.Когда вы запускаете сеанс с реальными входными данными, у тензоров будут значения, которые эти операции выполняют.Операции почти идентичны NarPy ndarrays, которые не являются символическими и содержат значения, вы можете получить интуицию.
  2. K.function просто склеивает входы с выходами, возвращая одну операцию, которая приучитывая входы, он будет следовать графику вычислений от входов до определенных выходов.В этом случае, учитывая список одиночных входных данных, он возвращает список 2 выходных тензоров потерь и градиентов.Они по-прежнему символичны, помните, что если вы попытаетесь напечатать один, вы просто получите то, что есть, и его форму, тип данных.
...