tensorflow - 这段代码中的权重是如何更新的?
问题描述
我正在阅读此代码,但无法弄清楚权重如何在其逻辑中更新:
tf.enable_eager_execution()
x = np.arange(0, 5, 0.1)
y = x**3 - 4*x**2 - 2*x + 2
y_noise = y + np.random.normal(0, 1.5, size=(len(x),))
def get_batch(x, y, batch_size=20):
idxs = np.random.randint(0, len(x), (batch_size))
return x[idxs], y[idxs]
class PolyModel(object):
def __init__(self):
self.w = tfe.Variable(tf.random_normal([4]))
def f(self, x):
return self.w[0] * x ** 3 + self.w[1] * x ** 2 + self.w[2] * x + self.w[3]
def loss(model, x, y):
err = model.f(x) - y
return tf.reduce_mean(tf.square(err))
model = PolyModel()
grad = tfe.implicit_gradients(loss)
optimizer = tf.train.AdamOptimizer()
iters = 20000
for i in range(iters):
x_batch, y_batch = get_batch(x, y)
optimizer.apply_gradients(grad(model, x_batch, y_batch))
if i % 1000 == 0:
print("Iteration {}, loss: {}".format(i+1, loss(model, x_batch, y_batch).numpy()))
那是因为在这一行中,权重在函数“apply_gradients”中隐式更新?
optimizer.apply_gradients(grad(model, x_batch, y_batch))
解决方案
tfe.implicit_gradients(loss)
是一个计算loss
模型权重梯度的函数。optimizer.apply_gradients()
应用梯度,即,它根据所用优化器的更新规则更新权重(例如,更新将在“Adam”和“SGD”之间变化)。因此,在每次迭代中,模型权重都会更新。
推荐阅读
- python-3.x - 如何使不和谐机器人只完成一次命令?
- django - 当我打开模型时,会自动替换一个字段值
- python - Python3 - RtMidi - 输入回调不起作用
- php - Laravel:在 Trix 编辑器中上传图像时不支持获取请求。虽然方法是 POST
- mysql - 无法连接到 mysql 工作台中的本地主机
- java - 如何从字符串中提取子字符串直到换行符
- reactjs - 更改 react-data-table-component 中的默认文本
- java - 多次调整大小时,带有 autoSizeText 的 TextView 无法正常工作
- angular - 订阅元素位置的更改检测
- angular - 使用 Angular 进行 Twilio 视频 + 文本聊天