2017-01-22 2 views
5

나는 몇 가지 실험을 할 Keras를 사용하고 난 그냥 간단한 MLP 모델의 무게 업데이트를 모니터링 : 첫 번째 조밀 계층`layer.get_weights()`는 무엇을 반환합니까?

# model contains one input layer in the format of dense, 
# one hidden layer and one output layer. 
model=mlp() 
weight_origin=model.layers[0].get_weights()[0] 
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']) 
model.fit(.....) # with adam optimizer 
weight_updated=model.layers[0].get_weights()[0] 
print weight_origin-weight_updated 

, 나는 제로의 행렬을 얻었다. 나는이 훈련이이 체중을 변화시키지 않는다고 생각했다. 그러나 다른 레이어의 가중치가 변경됩니다. 그래서 혼란 스럽습니다. 왜 첫 번째 레이어가 변경되지 않았습니까?

model.layers[0].get_weights()[1] # get_weight() returns a list of weights 

이 시간, 무게는 변화했다 : 나는 소스 코드를 확인하지만 여전히 아무 대답이 없어, 그때 모니터링을 시도했다. 그래서 나는 어떤 체중이 훈련 중에 작동하는 "진정한"체중인지 궁금합니다. 왜 체중 목록에 두 가지 요소가 있습니까? mlp()


정의 : layer.get_weights()의 질문에 대한

def mlp(): 
    model=Sequential() 
    model.add(Dense(500, input_dim=784)) 
    model.add(Dense(503,init='normal',activation='relu')) 
    model.add(Dense(503,init='normal',activation='relu')) 
    model.add(Dense(10, activation='softmax')) 
    return model 
+1

mlp() 함수를 제공해 주시겠습니까? 이것은 정말 이상한 행동입니다 –

+0

@ MarcinMożejko 나는 그것을 업데이트했습니다. 'layer.weights'리스트의 두 번째 가중치에 혼란 스럽습니다. –

+0

모델을 편집 했습니까? –

답변

3

는 :

나는이 문제에 대한 몇 가지 테스트를 실행하고 소스 코드를 확인했습니다. I는 Dense 층 파이썬 list의 유형 layer.get_weights()[0] 저장 층의 두 요소의 중량을 가지며 bias layer.get_weights()[1]가 저장된다 Layer와 가중치의 서브 클래스 인 것으로 나타났다. model.add(Dense(503,init='normal',activation='relu', bias=False )) :

bias는 레이어를 정의하는 동안 비활성화 할 수 있음을 유의해야 할 한 가지가있다. 이 경우 목록 layer.get_weights()에는 요소가 하나만 있습니다. bias 특성을 정의한 후에 False으로 설정하면 bias에 대한 요소가 남아 있으며 모델을 적용한 후에 업데이트됩니다. 의 질문에 대한

를 업데이트하지 :

def mlp_2(): model=Sequential() model.add(Dense(10, input_dim=784, activation='softmax', bias =False)) return model

그럼 제가 위에서 컴파일 같은 방법을 사용 : 나는 단지 하나의 조밀 한 층으로 순차 모델을 설정

맞다. 이것은 내가 가진 것입니다 : 그것은 여전히 ​​있지만, 우리는 무게가 확실히 변경 말할 수, 무게를 업데이트 할 것 같다

enter image description here

. 정확도가 높아지기 때문입니다. 나는 유일한 설명이 첫 번째 dense 레이어의 업데이트 (input_dim를 정의 함)가 Keras가 인쇄물에 비해 너무 작다고 생각합니다. 나는 더 정확한 가중치의 값을 검사하지 않았다. 만약 누군가가 그것을 가늠할 수 있다면 좋을 것이다.

관련 문제