强化学习课程代码调试踩坑记录(持续更新中...)

        在学习莫烦Python老师的强化学习课程的时候,调试课程的强化学习代码出现的各种错误,基本上是因为环境和软件包的版本兼容性出现的错误,建议各位按照视频对应的版本进行安装并安装正确的依赖,这里做一下记录并存档,供有需要的同学查阅。

莫烦python强化学习课程的地址:

什么是强化学习? (Reinforcement Learning)_哔哩哔哩_bilibili

课程配套github代码的地址:

GitHub - MorvanZhou/Reinforcement-learning-with-tensorflow: Simple Reinforcement learning tutorials, 莫烦Python 中文AI教学

涉及到因为版本迭代导致的取消或者增加的命令可以上tensorflow的官网去一一比对,直接替换为当前版本中存在的所需要的函数即可

https://tensorflow.google.cn/api_docs/python/tf/all_symbols

整体课程代码调试错误记录

第一种错误:ModuleNotFoundError

基本上都是因为缺失相关的库文件导致的,只要安装即可。

注意:安装之后记得在pycharm的终端里面import一下的库文件,比如,安装了torch,那么就import torch,安装了gym,那么就import gym。后面的问题描述中就不单独说明这一点了。

1.ModuleNotFoundError: No module named 'pandas'

pandas.errors.InvalidIndexError: (0, slice(None, None, None))

问题原因: Python 环境中没有安装 pandas 这个库。

解决办法:因为安装了CUDACUDNN,在Annconda环境下就需要采用conda命令安装,pip安装基本都会报错,首先在命令栏中启动环境

                                                conda activate cu118py310

(说明:因为安装的版本不同,所以大家按照自己安装的环境启动环境命令即可)

接下来启动安装

                                                        conda install pandas

2.ModuleNotFoundError: No module named 'tensorflow'

问题原因:Python 环境中没有安装 tensorflow 这个库。

解决办法:在命令栏中启动环境,然后启动安装命令,等待安装完成即可

                                                conda install -c conda tensorflow

3.ModuleNotFoundError: No module named 'matplotlib'

问题原因:Python 环境中缺少了名为 matplotlib 的模块

解决办法:使用命令

                                                        conda install matplotlib

直接安装即可。

4. PackagesNotFoundError: The following packages are not available from current channels:- gym

问题原因:缺少gym

解决办法:使用命令直接安装即可

                                                        conda install -c conda-forge gym

5.ModuleNotFoundError: No module named 'pyglet'

问题原因:缺少相应安装包

解决办法:安装即可

                                                        conda install-c conda-forge pylet

第二种错误:AttributeError

大都是因为版本更新导致的具体调用命令的调整,存在兼容性问题,解决办法是在导入Tensorflow时代码修改为

                                                        import tensorflow.compat.v1 as tf

或者换装1.x版本的Tensorflow。这里记录了1.x2.x版本中具体命令存在的兼容性问题,如果以上方法不管用,或者你不怕麻烦,那么就参考以下报错逐一修改。

1.AttributeError: 'DataFrame' object has no attribute 'ix'

问题原因:在较新版本的 pandas 中(特别是从 pandas 0.24.0 版本开始),.ix 索引器已经被废弃并从库中移除了。.ix 索引器是 pandas 早期版本中用于基于标签和整数位置的混合索引的,但它经常导致混淆和错误,因此被 .loc 和 .iloc 替代。

                .loc 用于基于标签的索引。

                .iloc 用于基于整数位置的索引。

解决办法:

如果原代码为:

                                                        result = df.ix[0:5, 'column_name']

则可修改为:

                                         result = df.iloc[0:5, df.columns.get_loc('column_name')] 

2.AttributeError: module 'tensorflow' has no attribute 'append'

问题原因:在使用pythonpandas库处理数据的时后,对DataFrame进行添加行操作,而在比较新的panda库版本中,append命令更新了

解决办法:

        a.将append改为_append

                                                     dataframe = dataframe._append()

        b.使用“pandas.concat()”方法代替“dataframe.append()

                                                        dataframe = pandas.concat()

3.AttributeError: module 'tensorflow' has no attribute 'set_random_seed'

问题原因:在 TensorFlow 的较新版本中,tensorflow.set_random_seed() 函数已经不再直接可用

解决办法:

                                                tf.set_random_seed(args.seed)#tf<2.0

                                                tf.random.set_seed(args.seed)#tf>2.0

4.AttributeError: module 'tensorflow' has no attribute 'placeholder'

问题原因:tf.placeholder是tensorflow1.x版本的使用的函数,在TensorFlow2.x中,tf.placeholder 已经被完全移除,因为它不再与 TensorFlow2.x的Eager Execution 模式兼容。

解决办法:

                                                        Import tensorflow as tf

将原代码:

                                        x = tf.placeholder(shape=[None, 2], dtype=tf.float32)

修改为

                                x = tf.compat.v1.placeholder(shape=[None, 2], dtype=tf.float32)

5.AttributeError: module 'tensorflow' has no attribute 'variable_scope'

问题原因:TensorFlow 2.x的版本的命令与1.x版本存在兼容性问题。

解决办法:使用compat接口修改命令

原代码:tf.variable_scope

修改后代码:tf.compat.v1.variable_scope

6.AttributeError: module 'tensorflow' has no attribute 'GraphKeys'

问题原因:同样地,是2.x和1.x中命令的兼容性问题

解决办法:使用compat接口修改命令

原代码:tf.GraphDef()

修改后代码:tf.compat.v1.GraphDef()

7.AttributeError: module 'tensorflow' has no attribute 'get_variable'

问题原因:同样地,是2.x和1.x中命令的兼容性问题

解决办法:使用compat接口修改命令

原代码:tf.get_variable

修改后代码:tf.compat.v1.get_variable

8.AttributeError: module 'tensorflow' has no attribute 'squared_difference'

问题原因:同样地,是2.x和1.x中命令的兼容性问题

解决办法:使用compat接口修改命令

原代码:tf.squared_difference

修改后代码:tf.compat.v1.squared_difference

9. AttributeError:module'tensorflow._api.v2.train'has no attribute 'RMSPropOptimizer'

问题原因:同上

解决办法:同上

10. AttributeError: module 'tensorflow' has no attribute 'get_collection'

问题原因:同上

解决办法:同上

11. AttributeError: module 'tensorflow' has no attribute 'assign'

问题原因:同上

解决办法:同上

12. AttributeError: module 'tensorflow' has no attribute 'Session'.

问题原因:同上

解决办法:同上

13. AttributeError: module 'tensorflow' has no attribute 'global_variables_initializer'

问题原因:同上

解决办法:同上

14. AttributeError: module 'tensorflow' has no attribute 'GraphKeys'

问题原因:同上

解决办法:同上

15. AttributeError: module 'tensorflow' has no attribute 'squared_difference'

问题原因:同上

解决办法:同上

16. AttributeError: 'PendulumEnv' object has no attribute 'seed'

问题原因:gym高版本中的Env.seed()被移除了, Pendulum-v1不直接提供seed方法来设置随机数生成器的种子

解决办法:

        a.使用高版本的替代方法,env.reset(seed=seed)代替env.seed(seed)

                如:

                使用env.reset(seed=1)代替env.seed(1)

        b.卸载当前版本的gym,安装更低版本的gym

                                                               conda uninstall gym

                                                conda install -c conda-forge gym==0.25.2

17.AttributeError: module 'tensorflow' has no attribute 'layers'

问题原因:在 TensorFlow 2.x 中,tf.layers 已经被弃用并移除了

解决办法:使用 tf.layers 的代码替换为 tf.keras.layers
    原来的代码:  

    net = tf.layers.dense()  

    修改后的代码:  

    net = tf.keras.layers.Dense()

第三种错误:RuntimeError

一般是因为命令与命令之间存在冲突的情况

RuntimeError: tf.placeholder() is not compatible with eager execution.

问题原因:在 TensorFlow 2.x的版本中,tf.placeholder() 确实不再与 Eager Execution 兼容,因为 TensorFlow 2.x 默认启用了 Eager Execution

解决办法:

在原代码包含tf.compat.v1.placeholder的语句之前添加

                                                tf.compat.v1.disable_eager_execution()

示例:

                                                tf.compat.v1.disable_eager_execution()

                       self.s = tf.compat.v1.placeholder(tf.float32, [None, self.n_features], name='s')

第四种错误:DependencyNotInstalled

一般是安装的库或者组件的相关依赖没有安装

1.Gym error DependencyNotInstalled: pygame is not installed, run pip install gym[classic_control]`

问题原因:缺少图形界面支持: 环境没有安装必要的图形界面库pygame

解决办法:在命令行中输入命令安装即可

                                                conda install -c conda-forge pygame

2.gym.error.DeprecatedEnv: Environment version v0 for `Pendulum` is deprecated. Please use `Pendulum-v1` instead.

问题原因:Pendulum-v0 环境版本已经被弃用,并建议你使用 Pendulum-v1

解决办法:

原句:

                                                env = gym.make('Pendulum-v0')

修改版本:

                                                env = gym.make('Pendulum-v1')

第五种错误:TypeError

一般是对数组或矩阵的索引或者数据类型转换存在问题时出现

TypeError: tuple indices must be integers or slices, not tuple

问题原因:在python中,元组不支持多维索引

解决办法: 在observation前面加上一句接收和转换的语句,如

原句:

                                                observation = np.array(observation)

修改之后:

                                                observation = np.array(observation)

                                                observation = observation[np.newaxis, :] 

第六种错误:ValueError

ValueError: setting an array element with a sequence.

待更新

第七种错误:ImportError

ImportError: Library "GLU" not found

问题原因:Python环境或系统中缺少OpenGL Utility Library (GLU) 的支持

解决办法:

                                                        sudo apt-get update 

                                               sudo apt-get install python3-opengl

注意:如果是python3版本的,就需要在命令中加入,不然会报找不到安装包的错误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值