• 在服务器上使用python-gym出现的关于显示的问题


    疫情期间在家连着实验室的服务器继续学习,用到关于强化学习相关的包 gym 时,在render上出现了问题。

    环境:

    Ubuntu18.04 服务器
    python 3.7.6
    gym 0.17.1
    jupyter 1.0.0
    ipython 7.13.0
    matplotlib 3.2.1

    用远程开 jupyter notebook 并在 jupyter 中运行 gym 的 env,调用 env.render() 时出现了如下报错:

    NoSuchDisplayException: Cannot connect to "None"

    在 StackOverflow 上找到了解决方案:

    首先在服务器上安装 xvfb ,并用 xvfb 运行可显示的 jupyter notebook:

    1 $ sudo apt-get install xvfb
    2 $ xvfb-run -s "-screen 0 1400x900x24" jupyter notebook

    然后在 jupyter 中加入代码:

    1 import matplotlib.pyplot as plt
    2 %matplotlib inline
    3 from IPython import display

    为显示加上一个函数:

    1 def show_state(env, step=0, info=""):
    2     plt.figure(3)
    3     plt.clf()
    4     plt.imshow(env.render(mode='rgb_array'))
    5     plt.title("Step: %d %s" % (step, info))
    6     plt.axis('off')
    7 
    8     display.clear_output(wait=True)
    9     display.display(plt.gcf())

    然后在运行过程中将 env.render() 替换为 show_state(env, step, info) 的调用即可。

    在任意env.step()函数调用、环境状态改变之后都可以调用show_state函数来展示图像

    应将env传入,并可以传入步数step,以及想要显示的信息文字串info

    当使用 xvfb-run 时可能遇到上一次调用没有关闭的情况,在 StackOverflow 上也找到了相关解决方法,只要在 xvfb-run 前使用指令:

    1 $ pkill Xvfb

    关掉之前的就可以正常开始新的了。

    附 StackOverflow  具体内容网址:

    https://stackoverflow.com/questions/40195740/how-to-run-openai-gym-render-over-a-server

    https://stackoverflow.com/questions/16726227/xvfb-failed-start-error

  • 相关阅读:
    xml
    反射
    类加载器
    tcp通信
    UDP通信
    UDP与TCP协议
    网络通信协议
    符合汽车安全和质量标准的CYPRESS FRAM
    SRAM是什么存储器
    网络通信与便携式应用驱动SRAM技术发展
  • 原文地址:https://www.cnblogs.com/cenariusxz/p/12666938.html
Copyright © 2020-2023  润新知