如果您对RNN的tf.clip_by_value和tf.clip_by_global_norm之间的区别以及如何确定要裁剪的最大值?感兴趣,那么这篇文章一定是您不可错过的。我们将详细讲解RNN的tf.
如果您对RNN的tf.clip_by_value和tf.clip_by_global_norm之间的区别以及如何确定要裁剪的最大值?感兴趣,那么这篇文章一定是您不可错过的。我们将详细讲解RNN的tf.clip_by_value和tf.clip_by_global_norm之间的区别以及如何确定要裁剪的最大值?的各种细节,此外还有关于#1055 ... sql_mode=only_full_group_by、Float.MIN_VALUE和Float.MIN_NORMAL之间的区别? [重复]、Linux服务器MySQL5.7版本only_full_group_by问题、mysql 5.7 解决 sql_mode=ONLY_FULL_GROUP_BY的实用技巧。
本文目录一览:- RNN的tf.clip_by_value和tf.clip_by_global_norm之间的区别以及如何确定要裁剪的最大值?
- #1055 ... sql_mode=only_full_group_by
- Float.MIN_VALUE和Float.MIN_NORMAL之间的区别? [重复]
- Linux服务器MySQL5.7版本only_full_group_by问题
- mysql 5.7 解决 sql_mode=ONLY_FULL_GROUP_BY
RNN的tf.clip_by_value和tf.clip_by_global_norm之间的区别以及如何确定要裁剪的最大值?
想要了解在TensorFlow中实现梯度裁剪的角色tf.clip_by_value
以及tf.clip_by_global_norm
实现过程中的区别。哪一种是首选,以及如何确定要裁剪的最大值?
答案1
小编典典TL; DR :tf.clip_by_global_norm
用于渐变裁剪。
clip_by_value
tf.clip_by_value
将每个值裁剪到一个张量内,而不管张量中的其他值如何。例如,
tf.clip_by_value([-1, 2, 10], 0, 3) -> [0, 2, 3] # Only the values below 0 or above 3 are changed
因此,它可以改变张量的方向,因此,如果张量中的值彼此解相关(对于梯度裁剪而言不是这种情况),则应使用它,或者避免张量中的零/无限值可能导致其他地方的Nan
/无限值(例如,通过裁剪最小epsilon = 1e-8和非常大的最大值)。
clip_by_norm
tf.clip_by_norm
如有必要,重新缩放一个张量,以使其L2范数不超过特定阈值。通常,避免梯度在一个张量上爆炸很有用,因为您可以保持梯度方向。例如:
tf.clip_by_norm([-2, 3, 6], 5) -> [-2, 3, 6]*5/7 # The original L2 norm is 7, which is >5, so the final one is 5tf.clip_by_norm([-2, 3, 6], 9) -> [-2, 3, 6] # The original L2 norm is 7, which is <9, so it is left unchanged
但是,clip_by_norm
仅在一个梯度上起作用,因此,如果在所有梯度张量上使用它,则将使它们不平衡(某些将被重新缩放,另一些则不会,并且并非全部具有相同的比例)。
请注意,前两个仅在一个张量上起作用,而最后一个在张量列表上使用。
clip_by_global_norm
tf.clip_by_global_norm
重新缩放张量列表,以使所有范数的向量的总范数不超过阈值。目标与clip_by_norm
(避免爆炸梯度,保持梯度方向)相同,但是它一次处理所有梯度,而不是分别作用于每个梯度(也就是说,如有必要,对所有梯度都按相同的因子进行缩放,或者不进行缩放)他们被重新缩放)。这样更好,因为可以保持不同梯度之间的平衡。
例如:
tf.clip_by_global_norm([tf.constant([-2, 3, 6]),tf.constant([-4, 6, 12])] , 14.5)
将两个张量缩放一个因子14.5/sqrt(49 + 196)
,因为第一个张量的L2范数为7,第二个张量的L2范数为14,并且sqrt(7^2+14^2)>14.5
这(tf.clip_by_global_norm
)是您应该用于渐变剪切的那个。例如,请参阅此以获取更多信息。
选择价值
选择最大值是最困难的部分。您应该使用最大的值,以免出现爆炸梯度(其影响可以是Nan
s或infinite
张量中出现的值,在经过一些训练后,损失/准确度恒定)。该值应该tf.clip_by_global_norm
比其他值更大,因为由于隐含的张量的数量,全球L2规范在机械上将比其他规范更大。
#1055 ... sql_mode=only_full_group_by
sql_mode=only_full_group_by
版权声明:本文为参考多篇博主文章,略作测试修改。
参考文章:
猿医生 的《5分钟学会MySQL-this is incompatible with sql_mode=only_full_group_by错误解决方案》。
XiaoMaPro 的 《MySql版本问题sql_mode=only_full_group_by》
hhcoder 的 《Mysql group by this is incompatible with sql_mode=only_full_group_by》
一、错误信息:
使用左连接进行group by 操作时,报如下错误:
#1055 - Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated
column ''b.id'' which is not functionally dependent on columns in GROUP BY clause;
this is incompatible with sql_mode=only_full_group_by
二、错误翻译:
#1055-选择列表的表达式3不在GROUP BY子句中,
并且包含未聚合的列“b.id”,
该列在功能上不依赖GROUP BY子句中的列;这与SQL模式=仅“完整”GROUP BY不兼容。
三、错误原因:
MySQL 5.7,实现检测功能的依赖。
如果启用了ONLY_FULL_GROUP_BY SQL模式(默认),
MySQL拒绝选择列表查询,条件,或命令列表是指非聚合列既不是GROUP by子句中指定功能也不依赖他们。
(5.7之前,MySQL不检测功能的依赖和ONLY_FULL_GROUP_BY在默认情况下不启用。
ONLY_FULL_GROUP_BY,对于GROUP BY聚合操作,
如果在SELECT中的列,没有在GROUP BY中出现,那么这个SQL是不合法的,因为列不在GROUP BY从句中,
也就是说查出来的列必须在GROUP BY后面出现否则就会报错,或者这个字段出现在聚合函数里面。
四、解决:
(1)可以先查看下mysql版本:
select version();
结果:5.7.14-log
(2)再使用select @@GLOBAL.sql_mode,查看ONLY_FULL_GROUP_BY是否启用。
结果显示示例:
ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
结果中有ONLY_FULL_GROUP_BY,代表被启用。
(3)把这一项去掉:
set @@GLOBAL.sql_mode=''STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'';
(4)或者修改配置文件
1、打开配置文件mysql.cnf
sudo vi /etc/mysql/mysql.cnf
2、添加配置
sql_mode =''STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION''
3、重启mysql
sudo service mysql restart
(5)重新查看sql_mode,看是否修改成功。
SELECT @@sql_mode;
(6)测试
执行sql语句,看是否还报错。
Float.MIN_VALUE和Float.MIN_NORMAL之间的区别? [重复]
如何解决Float.MIN_VALUE和Float.MIN_NORMAL之间的区别? [重复]?
| 这个问题已经在这里有了答案:解决方法
Linux服务器MySQL5.7版本only_full_group_by问题
mysql5.7的版本设置了 mysql sql_mode=only_full_group_by 这一属性,所以导致了错误。
查看mysql版本
select version();
查看sql_mode
select @@global.sql_mode;
查询出来的值为:
ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
基本可以确定问题only_full_group_by引起,在此推荐修改配置文件,这样即使MySQL服务器重启也没问题:
1、在linux找到文件
/etc/mysql/mysql.conf.d/mysqld.cnf
2、末尾添加如下语句
sql_mode=''STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION''
3、重新启动MySQL服务
service msyql restart
mysql 5.7 解决 sql_mode=ONLY_FULL_GROUP_BY
试过很多百度的解决方法没有成功,觉得可能有些模糊,所以想写的详细些,方便少采坑。
登录数据库:
mysql -u root -pxxxxx
查询sql_mode包含哪些模块:
select @@sql_mode;
去掉字符串中的 ONLY_FULL_GROUP_BY
复制:
STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
编辑 /etc/my.cnf
vim /etc/my.cof
在 [mysqld] 在下面添加:
sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
保存
重启mysql service mysqld restart
禁用ONLY_FULL_GROUP_BY前:
禁用ONLY_FULL_GROUP_BY后:
到此禁用 ONLY_FULL_GROUP_BY 成功
关于RNN的tf.clip_by_value和tf.clip_by_global_norm之间的区别以及如何确定要裁剪的最大值?的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于#1055 ... sql_mode=only_full_group_by、Float.MIN_VALUE和Float.MIN_NORMAL之间的区别? [重复]、Linux服务器MySQL5.7版本only_full_group_by问题、mysql 5.7 解决 sql_mode=ONLY_FULL_GROUP_BY等相关内容,可以在本站寻找。
本文标签: