这是创建变量,为其创建渐变并使用ApplyGradientDescent创建渐变更新操作的最小示例
auto w = Variable(scope, { 3 }, DT_FLOAT);
std::vector<Output> grad_outputs;
TF_CHECK_OK(AddSymbolicGradients(scope, { loss }, { w }, &grad_outputs));
auto apply_w1 = ApplyGradientDescent(scope, w, Cast(scope, 0.01, DT_FLOAT), { grad_outputs[0] });
但是,我真正想要的是具有可变的学习率,可以从图形外部进行更新,同时避免每次都必须在图形上创建新的梯度运算...这样:
auto ph = Placeholder(scope, DT_FLOAT));
auto var = Variable(scope, {1}, DT_FLOAT));
auto assignVar = Assign(scope, var, ph));
Tensor newLr(DT_FLOAT, TensorShape({1}));
newLr.flat<float>().data()[0] = 0.001;
TF_CHECK_OK(session->Run({{ph, newLr}}, {assignVar}, nullptr));
auto apply = ApplyGradientDescent(scope, w, var, { grad_outputs[0] });
问题是以上操作失败,因为ApplyGradientDescent期望标量为alpha,我不理解。有什么办法解决吗?