Keras2.x-얻 무게의 층

내가 사용하여 Windows10,Python3.5 고 tensorflow1.1.0. 나는 다음과 같은 스크립트:

import tensorflow as tf
import tensorflow.contrib.keras.api.keras.backend as K
from tensorflow.contrib.keras.api.keras.layers import Dense

tf.reset_default_graph()
init = tf.global_variables_initializer()
sess =  tf.Session()
K.set_session(sess) # Keras will use this sesssion to initialize all variables

input_x = tf.placeholder(tf.float32, [None, 10], name='input_x')    
dense1 = Dense(10, activation='relu')(input_x)

sess.run(init)

dense1.get_weights()

나는 오류:AttributeError:'텐서'객체의 특성이 없'무게'

나는 무엇을 잘못하고,그리고 어떻게 가중치의dense1? 내가 보기에는 이](https://stackoverflow.com/questions/42053170/keras-how-can-i-get-biasess-weights 고)[this](https://stackoverflow.com/questions/42411891/how-to-extract-bias-weights-in-keras-sequential-model 다)그래서 포스트,하지만 나는 아직도 할 수 있't 작동합니다.

을 얻고 싶은 경우량과 편견의 모든 층에,당신은 단순히 사용:

for layer in model.layers: print(layer.get_config(), layer.get_weights())

이 모든 정보를 인쇄하는's 관련이 있습니다.

당신이 원하는 무게 직접적으로 반환 numpy 배열을 사용할 수 있습니다:

first_layer_weights = model.layers[0].get_weights()[0]
first_layer_biases  = model.layers[0].get_weights()[1]
second_layer_weights = model.layers[1].get_weights()[0]
second_layer_biases  = model.layers[1].get_weights()[1]

etc.

해설 (0)
해결책

당신이 쓰는 경우:

dense1=밀도(10,인증='relu')(input_x)

다음dense1지 않은 층,it's 의 출력 레이어입니다. 레이밀도(10,인증='relu')

그래서 그것은 것을 의미:

dense1 = Dense(10, activation='relu')
y = dense1(input_x)

여기에는 풀 snippet:

import tensorflow as tf
from tensorflow.contrib.keras import layers

input_x = tf.placeholder(tf.float32, [None, 10], name='input_x')    
dense1 = layers.Dense(10, activation='relu')
y = dense1(input_x)

weights = dense1.get_weights()
해설 (2)

를 보시려면 어떻게 무게와 편견의 층 시간이 지나도 변경,추가할 수 있습니다 콜백을 기록하는 값에서 각 교육 epoch.

는 모델을 사용하는 이 같은 예를 들어, 가져오기 numpy 로 np 모델=순차적([밀도(16,input_shape=(train_inp_s.모[1:])),밀도(12),밀도(6),고밀도(1)]) 추가 콜백**kwarg 동안 피팅:

gw=GetWeights() 모델입니다.맞(X,y,validation_split=0.15,epochs=10,batch_size=100,콜백=[gw])

는 콜백에 의해 정의 `` 클래스 GetWeights(Callback):

Keras 콜백을 수집하는 값의 무게와 편견에서 각 시대

definit(자): super(GetWeights,자).init() 자체입니다.weight_dict={}

def on_epoch_end(자가,epoch,로그=None):

이 기능을 실행의 끝에서 각 시대

루프를 통해 각 층을 얻게와 편견

에 대한 layer_i 범위(len(자체입니다.모델입니다.층)으): w=self.모델입니다.층[layer_i].get_weights()[0] b=self.모델입니다.층[layer_i].get_weights()[1] 인쇄('층%s 는 무게의 모양%s 과 편견의 형태%s'%( layer_i,np.형상(w),np.shape(b)))

모든 저장 무게와 편견을 안에서 사전

는 경우 epoch==0:

만들기를 배열을 보게와 편견

자체입니다.weightdict['w'+str(layer_i+1)]=w 자체입니다.weight_dict['b'+str(layer_i+1)]=b 다른 사람:

추가로 새로운 무게로 이전에 만들어 무게는 배열

자체입니다.weightdict['w'+str(layer_i+1)]=np.dstack( (self.weightdict['w'+str(layer_i+1)],w))

추가로 새로운 무게로 이전에 만들어 무게는 배열

자체입니다.weight_dict['b'+str(layer_i+1)]=np.dstack( (self.weight_dict['b'+str(layer_i+1)]b)) ``

이러 콜백을 구축 할 것입니다 사전으로 모든 레게와 편견을 분류하여 계층의 숫자,그래서 당신은 당신이 볼 수 있는 방법들이 시간이 지나도 변경으로 모델이 되는 훈련을 받았습니다. You'을 주목의 모양 각각의 중량과 바이어스 배의 모양에 따라 달라집 모델층이다. 하나 무게 배열하고 하나의 바이어스 배열로 저장되는 각 계층에서의 모델입니다. 세 번째 축(깊이)그들의 진화를 통한 시간입니다.

여기서 우리는 10 의 시대와는 모델의 층으로 16,12,6,및 1 개의 신경 세포: `` 키에 gw.weight_dict: 인쇄(str(키)+'shape:%s'%str(np.shape(gw.weight_dict[key])))

w_1 모양:(5,16,10) b_1 모양:(1,16,10) w_2 모양:(16,12,10) b_2 모양:(1,12,10) w_3 모양:(12,6,10) b_3 모양:(1,6,10) w_4 모양:(6,1,10) b_4 모양:(1,1,10) ``

해설 (0)