instalar example español python theano keras

python - example - keras tensorflow



Obtención del gradiente de los pesos de wrt de salida del modelo usando Keras (1)

Estoy interesado en construir modelos de aprendizaje de refuerzo con la simplicidad de la API de Keras. Desafortunadamente, no puedo extraer el gradiente de la salida (no error) con respecto a los pesos. Encontré el siguiente código que realiza una función similar ( mapas de relevancia de redes neuronales (usando Keras) )

get_output = theano.function([model.layers[0].input],model.layers[-1].output,allow_input_downcast=True) fx = theano.function([model.layers[0].input] ,T.jacobian(model.layers[-1].output.flatten(),model.layers[0].input), allow_input_downcast=True) grad = fx([trainingData])

Cualquier idea sobre cómo calcular el gradiente de la salida del modelo con respecto a los pesos para cada capa sería apreciada.


Para obtener los gradientes de salida del modelo con respecto a los pesos usando Keras, debe usar el módulo de back-end Keras. Creé este ejemplo simple para ilustrar exactamente qué hacer:

from keras.models import Sequential from keras.layers import Dense, Activation from keras import backend as k model = Sequential() model.add(Dense(12, input_dim=8, init=''uniform'', activation=''relu'')) model.add(Dense(8, init=''uniform'', activation=''relu'')) model.add(Dense(1, init=''uniform'', activation=''sigmoid'')) model.compile(loss=''binary_crossentropy'', optimizer=''adam'', metrics=[''accuracy''])

Para calcular los gradientes primero necesitamos encontrar el tensor de salida. Para la salida del modelo (lo que hizo mi pregunta inicial) simplemente llamamos model.output. También podemos encontrar los gradientes de salidas para otras capas llamando a model.layers [index] .output

outputTensor = model.output #Or model.layers[index].output

Entonces necesitamos elegir las variables que están con respecto al gradiente.

listOfVariableTensors = model.trainable_weights #or variableTensors = model.trainable_weights[0]

Ahora podemos calcular los gradientes. Es tan fácil como lo siguiente:

gradients = k.gradients(outputTensor, listOfVariableTensors)

Para ejecutar realmente los gradientes dados una entrada, necesitamos usar un poco de Tensorflow.

trainingExample = np.random.random((1,8)) sess = tf.InteractiveSession() sess.run(tf.initialize_all_variables()) evaluated_gradients = sess.run(gradients,feed_dict={model.input:trainingExample})

¡Y eso es!