2017-08-30 42 views
2

我已經在Tensorflow中做了一個簡單的線性迴歸。我怎麼知道迴歸的係數是什麼? 我已閱讀文檔,但無法在任何地方找到它! (https://www.tensorflow.org/api_docs/python/tf/estimator/LinearRegressor在Tensorflow中獲得線性迴歸的係數

編輯代碼示例

import numpy as np 
import tensorflow as tf 

# Declare list of features, we only have one real-valued feature 
def model_fn(features, labels, mode): 
    # Build a linear model and predict values 
    W = tf.get_variable("W", [1], dtype=tf.float64) 
    b = tf.get_variable("b", [1], dtype=tf.float64) 
    y = W * features['x'] + b 
    # Loss sub-graph 
    loss = tf.reduce_sum(tf.square(y - labels)) 
    # Training sub-graph 
    global_step = tf.train.get_global_step() 
    optimizer = tf.train.GradientDescentOptimizer(0.01) 
    train = tf.group(optimizer.minimize(loss), 
        tf.assign_add(global_step, 1)) 
    # EstimatorSpec connects subgraphs we built to the 
    # appropriate functionality. 
    return tf.estimator.EstimatorSpec(
     mode=mode, 
     predictions=y, 
     loss=loss, 
     train_op=train) 

estimator = tf.estimator.Estimator(model_fn=model_fn) 
# define our data sets 
x_train = np.array([1., 2., 3., 4.]) 
y_train = np.array([0., -1., -2., -3.]) 
x_eval = np.array([2., 5., 8., 1.]) 
y_eval = np.array([-1.01, -4.1, -7, 0.]) 
input_fn = tf.estimator.inputs.numpy_input_fn(
    {"x": x_train}, y_train, batch_size=4, num_epochs=None, shuffle=True) 
train_input_fn = tf.estimator.inputs.numpy_input_fn(
    {"x": x_train}, y_train, batch_size=4, num_epochs=1000, shuffle=False) 
eval_input_fn = tf.estimator.inputs.numpy_input_fn(
    {"x": x_eval}, y_eval, batch_size=4, num_epochs=1000, shuffle=False) 

# train 
estimator.train(input_fn=input_fn, steps=1000) 
# Here we evaluate how well our model did. 
train_metrics = estimator.evaluate(input_fn=train_input_fn) 
eval_metrics = estimator.evaluate(input_fn=eval_input_fn) 
print("train metrics: %r"% train_metrics) 
print("eval metrics: %r"% eval_metrics) 
+0

你可以發佈你的代碼,以便我們看到你究竟做了什麼?一般難以回答... – Umberto

+0

對不起。我正在使用https://www.tensorflow.org/get_started/get_started – japmelian

+0

中的示例,您並未使用['tf.estimator.LinearRegressor'](https://www.tensorflow.org/api_docs/python/tf/estimator/LinearRegressor),而是實現你自己的估計器,對吧? (這相當於一個線性迴歸器)。 – jdehesa

回答

1

估計被設計爲一個黑盒子的基本工作原理,所以沒有直接的API來獲取權重。即使像你一樣,你是定義模型的人(與使用預先存在的模型相反),你不能直接訪問估計器對象中的參數。

也就是說,您仍然可以通過其他方式檢索變量。如果您知道變量的名稱,則可以使用get_operation_by_nameget_tensor_by_name從圖形對象中簡單地獲取它們。一個更實用和一般的選擇是使用一個集合。當您撥打tf.get_variable或之後,撥打tf.add_to_collection,您可以將模型變量置於通用集合名稱下供以後檢索。如果您看看tf.estimator.LinearRegressor實際上是如何構建的(在this module中搜索函數linear_model),則所有模型變量都會添加到tf.GraphKeys.GLOBAL_VARIABLEStf.GraphKeys.MODEL_VARIABLES。這是(大概是,我還沒有真正選中)共同所有可用的罐頭估計,所以通常使用其中的一個時,你應該能夠簡單地做:您在使用tf.GraphKeys.MODEL_VARIABLES

model_vars = tf.get_collection(tf.GraphKeys.MODEL_VARIABLES) 

最好這種情況下,而不是tf.GraphKeys.GLOBAL_VARIABLES,它具有更通用的目的,並可能包含其他無關變量。