[tf]进行梯度训练的两种方式

第一种可以进行梯度裁剪使用apply_gradients操作

con.set_model(models.TransE)

#Now we apply gradient clipping. For this, we need to get the gradients,
#use the `clip_by_value()` function to clip them, then apply them:
threshold = 1.0
self.model = model
self.trainModel = self.model(config = self)
optimizer = tf.train.GradientDescentOptimizer(learning_rate)
grads_and_vars = optimizer.compute_gradients(self.trainModel.loss)
#list包括的是:梯度和更新变量的元组对
capped_gvs = [(tf.clip_by_value(grad, -threshold, threshold), var) 
             for grad, var in grads_and_vars]
 #执行对应变量的更新梯度操作
training_op = optimizer.apply_gradients(capped_gvs)

第二种直接使用minimize

调用minimize的时候是干了两件时间,compute_gradientsapply_gradients,这样写更为方便,但是如果要进行梯度的裁剪,梯度的选择就要写成上面的形式。

self.optimizer = tf.train.AdagradOptimizer(self.params.learning_rate).minimize(self.loss)`
_, err = self.sess.run([self.optimizer, self.loss], feed_dict={self.ph: ph, self.pt: pt, self.nh: nh, self.nt: nt, self.r: r})
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 提着晚餐便当就准备回家 走着, 嘀嗒嘀嗒的作响 原来是破了口袋,粗了心来 饭菜怎么不可口, 曾拥挤得饭台,不在 你...
    有只鱼阅读 87评论 0 0
  • java8 新特性 核心内容 Lambda:函数式接口编程,简化代码量,类型上下文自动推断。 Stream Api...
    小张同学_loveZY阅读 266评论 0 0
  • 今晚开始第一篇,题目暂时不起。 今天上班前去了趟医院,对,我爸妈上班的地方,我做为一个很久没去过医院看病的病人,挂...
    Lovemeforever阅读 215评论 0 1
  • 我享过不默写的福,更吃过不默写的亏。 我自己读高中时,语文老师几乎从不默写,课本上、考纲上要求背诵的内容,他会提醒...
    教书匠陈浩阅读 2,047评论 16 52