【发布时间】:2018-03-13 16:36:23
【问题描述】:
我有一个在 TensorFrlow 中实现的逻辑回归模型 (lr)。我使用这个模型来生成预测:
print s.run(preds, feed_dict = {x:X[:5]})
之后我尝试通过以下方式更改模型参数:
lr.w = tf.assign(lr.w, np.random.uniform(size=(inp_dim, out_dim)))
lr.b = tf.assign(lr.b, np.random.uniform(size=(out_dim,)))
s.run([lr.w, lr.b])
之后我以同样的方式生成新的预测:
print s.run(preds, feed_dict = {x:X[:5]})
令人惊讶的是,我得到了与模型参数更改之前相同的值。所以,看起来我没有设法更改模型参数。
有谁知道我做错了什么?
添加
我可能需要提供有关我的“架构”的更多详细信息。这是我对逻辑回归的实现:
class logreg:
def __init__(self, inp_dim, out_dim, r = 1.0):
# initialize values of model parameters
w_val = np.random.uniform(-r, r, size = (inp_dim, out_dim))
b_val = np.random.uniform(-r, r, size = (out_dim,))
self.w = tf.Variable(w_val, tf.float64)
self.b = tf.Variable(b_val, tf.float64)
def get_model_graph(self, inp):
return tf.nn.softmax(tf.matmul(inp, self.w) + self.b)
我使用这个类的一个实例来定义预测方法:
x = tf.placeholder(tf.float64, [None, inp_dim])
preds = lr.get_model_graph(x)
我尝试通过更改 lr.w 和 lr.b 的值来“重新定义”预测函数,但它不起作用(如上所述)。
但是,我发现重新定义预测函数后,模型参数的新值变得可见:
lr.w = tf.assign(lr.w, np.random.uniform(size=(inp_dim, out_dim)))
lr.b = tf.assign(lr.b, np.random.uniform(size=(out_dim,)))
s.run(lr.w)
s.run(lr.b)
preds = lr.get_model_graph(x)
这是为什么呢? “preds”的计算图不是绑定到lr.w 和lr.b 并重新定义“preds”我只需要更改w 和b 的值吗?
【问题讨论】:
标签: tensorflow