2017-07-24 84 views
0

我對tensorflow相對較新,但即使經過大量的研究,我也無法找到某些變量含義的文檔。tf.contrib.learn.DNNClassifier提取的權重和偏差的含義和維數

對於我目前的項目,我想借助tensorflow來訓練一個DNN,然後我想從中提取權重和偏差矩陣,以便在另一個應用OUTSIDE tensorflow中使用它。對於第一次嘗試,我建立了一個具有[4,10,2]結構的簡單網絡,其預測了二元結果。

我用3個real_valued_columns和單個sparse_column_with_keys(包裝在一個embedding_column)作爲特徵:

def build_estimator(optimizer=None, activation_fn=tf.sigmoid): 
    """Build an estimator""" 
    # Sparse base columns 
    column_stay_point = tf.contrib.layers.sparse_column_with_keys(
     column_name='stay_point', 
     keys=['no', 'yes']) 

    # Continuous base columns 
    column_heading = tf.contrib.layers.real_valued_column('heading') 
    column_velocity = tf.contrib.layers.real_valued_column('velocity') 
    column_acceleration = tf.contrib.layers.real_valued_column('acceleration') 

    pedestrian_feature_columns = [column_heading, 
            column_velocity, 
            column_acceleration, 
            tf.contrib.layers.embedding_column(
             column_stay_point, 
             dimension=8, 
             initializer=tf.truncated_normal_initializer)] 

    # Create classifier 
    estimator = tf.contrib.learn.DNNClassifier(
     hidden_units=[10], 
     feature_columns=pedestrian_feature_columns, 
     model_dir='./tmp/pedestrian_model', 
     n_classes=2, 
     optimizer=optimizer, 
     activation_fn=activation_fn) 

    return estimator 

我調用默認參數這個函數和使用estimator.fit(...)來訓練DNN。除了關於已棄用的「標量總結」功能的一些警告,它成功運行併產生了合理的結果。我打印模型的所有變量,通過使用下面的行:

var = {k: estimator.get_variable_value(k) for k in estimator.get_variable_names()) 

我有望獲得大小10x4和2×10的權重矩陣,以及10×尺寸和2×1的偏壓矩陣。但我得到了以下內容:

'dnn/binary_logistic_head/dnn/learning_rate': 0.05 (actual value, scalar) 

'dnn/input_from_feature_columns/stay_point_embedding/weights': 2x8 array 

'dnn/hiddenlayer_0/weights/hiddenlayer_0/weights/part_0/Adagrad': 11x10 array 

'dnn/input_from_feature_columns/stay_point_embedding/weights/int_embedding/weights/part_0/Adagrad': 2x8 array 

'dnn/hiddenlayer_0/weights': 11x10 array 

'dnn/logits/biases': 1x1' array 

'dnn/logits/weights/nn/dnn/logits/weights/part_0/Adagrad': 10x1 array 

'dnn/logits/weights': 10x1 array 

'dnn/logits/biases/dnn/dnn/logits/biases/part_0/Adagrad': 1x1 array 

'global_step': 5800, (actual value, scalar) 

'dnn/hiddenlayer_0/biases': 1x10 array 

'dnn/hiddenlayer_0/biases//hiddenlayer_0/biases/part_0/Adagrad': 1x10 array 

是否有任何文件一下這些神祕的名字的意思是,爲什麼做矩陣有這些奇怪的尺寸是多少?另外,爲什麼有引用Adagrad優化器,儘管從未指定它?

任何幫助,高度讚賞!

回答

0

輸入節點的網絡中的數是11,而不是4 8(embedding_column)+ COLUMN_HEADING(1),column_velocity(1),column_acceleration(1)= 11

並且基於該變量名的輸出是一個二進制邏輯節點,所以輸出節點的數目只有一個,而不是2

以下是在權重/偏壓您感興趣

DNN/hiddenlayer_0 /權重:11x10陣列 - >有從輸入到隱藏節點的權重

DNN/hiddenlayer_0 /偏壓 ':1×10陣列 - 隱藏節點>偏見

DNN/logits /權重':10×陣列 - >從隱藏節點權重到所述輸出節點

DNN/logits /偏置':1x1'陣列 - >輸出節點的偏置。

爲什麼有引用Adagrad優化器,儘管從未指定它?
最有可能的默認優化器是AdaGrad。

+0

謝謝!我意識到我在嵌入列中設置了dimension = 8。這解決了我的問題與奇數維度。 – DocDriven

相關問題