복붙노트

[PYTHON] Keras를 사용하여 모델 출력 w.r.t 가중치의 그래디언트 가져 오기

PYTHON

Keras를 사용하여 모델 출력 w.r.t 가중치의 그래디언트 가져 오기

Keras API의 단순성으로 학습 모델을 강화하는 데 흥미가 있습니다. 불행히도, 나는 가중치에 대한 출력의 그라디언트 (오류가 아님)를 추출 할 수 없습니다. 비슷한 기능을 수행하는 다음 코드를 발견했습니다 (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])

각 레이어의 가중치와 관련하여 모델 출력의 그래디언트를 계산하는 방법에 대한 아이디어는 인정 될 것입니다.

해결법

  1. ==============================

    1.Keras를 사용하는 가중치와 관련하여 모델 출력의 그래디언트를 얻으려면 Keras 백엔드 모듈을 사용해야합니다. 나는이 간단한 예제를 만들어 정확히 무엇을해야하는지 설명했다.

    Keras를 사용하는 가중치와 관련하여 모델 출력의 그래디언트를 얻으려면 Keras 백엔드 모듈을 사용해야합니다. 나는이 간단한 예제를 만들어 정확히 무엇을해야하는지 설명했다.

    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'])
    

    그라디언트를 계산하려면 먼저 출력 텐서를 찾아야합니다. 모델의 출력 (초기 질문에서 무엇을 요구했는지)을 간단히 model.output이라고합니다. model.layers [index] .output을 호출하여 다른 레이어의 출력 그라디언트를 찾을 수도 있습니다.

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

    그런 다음 그라디언트와 관련된 변수를 선택해야합니다.

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

    이제 그라디언트를 계산할 수 있습니다. 다음과 같이 쉽습니다.

    gradients = k.gradients(outputTensor, listOfVariableTensors)
    

    입력이있는 그래디언트를 실제로 실행하려면 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})
    

    그리고 그게 다야!

  2. from https://stackoverflow.com/questions/39561560/getting-gradient-of-model-output-w-r-t-weights-using-keras by cc-by-sa and MIT license