1. 首页
  2. 生活常识
  3. chrome小恐龙怎么打开(怎样禁止谷歌浏览器小恐龙)

chrome小恐龙怎么打开(怎样禁止谷歌浏览器小恐龙)

简介:关于chrome小恐龙怎么打开(怎样禁止谷歌浏览器小恐龙)的相关疑问,相信很多朋友对此并不是非常清楚,为了帮助大家了解相关知识要点,小编为大家整理出如下讲解内容,希望下面的内容对大家有帮助!
如果有更好的建议或者想看更多关于生活常识技术大全及相关资讯,可以多多关注茶馆百科网。

下依郭依普自凹穴

量子比特产品|公开QbitAI

明明是互联网的状态,我为什么要访问这个页面

没有一个!法律!打击!走吧!

冷静下来。

作为谷歌遗传算法,一种在浏览器中独一无二的AI系统。

我们拿走了最好的部分,就在这里。

GIF板:

它飞起来足够快了

总而言之,这个AI可以轻松玩到20000分以上……

你能打多少?我觉得你做不到。毕竟,在chromedino.com上,人类玩家的历史最高分是18842分。

然而,上传视频的作者并没有透露他使用的方法,当然也没有给出开源地址。没关系,其他人公开分享了更多细节。

例如,GitHub有一个名为“IAMDinosaur”的开源代码,它也使用神经网络遗传算法来解决恐龙跳跃问题。

地址是:https://github.com/ivanseidel/iamdinosaur

也有美中不足的地方。不过,好消息是,一位外国兄弟拉维•蒙德(Ravi Munde)最近出版了一本非常详细的教程。

本教程使用的方法是强化学习中的Q-learning,更适合初学者练习,对硬件要求不高。

关于量子位处理的教程如下。

强化学习的能力是动物与生俱来的。以孩子学走路为例,如果孩子努力迈出第一步,就会得到父母的鼓励,可能是掌声,也可能是一块糖果;但如果孩子坚决拒绝学走路,父母就不会给他糖果。强化学习就是根据这种动机行为建立起来的。

在这个游戏中,对于我们的AI小恐龙来说,强化学习要求他首先认识到在没有监督的情况下做不同动作的后果,并达到高分的最高动机。

一个典型的强化学习闭环

拉维蒙德利用Q-learning模拟了一种特殊的功能,这种功能驱使人工智能在不同的情况下做出正确的选择。

Q-learning是强化学习的一种无模型实现,它根据Q值来决定在每个状态下采取行动可以获得什么样的奖励。一个样本Q表让我们对数据的结构有了一个概念。在《Dinosaur Run》中,状态是游戏的当前截图,你可以采取的行动是跳或不跳[0,1]。

Q表示例

Ravi Munde决定使用深度神经网络来确定幼恐龙何时跳跃,并使用不同的参数来辅助它,而不仅仅是最简单的强化学习实现。

缺乏标记数据使得强化学习非常不稳定。为了获得正确的游戏数据,Munde决定训练模型,让婴儿跳跃数千次,记录每次移动的反馈,然后从数据中随机选择一些。

但后来,蒙德修士发现他训练了一个固执的模型——,它坚持认为跳总比不跳好。所以,为了让模型在训练时在跳跃和不跳跃之间做更多的事情,他引入了一个决定行动随机性的函数,然后逐渐降低其值以减少随机性,最后让模型选择最有可能获得奖励的行动。

信用分配问题会使模型陷入混乱。哪些过去的行为是目前正在获得的奖励?在《Dinosaur Run》中,小恐龙在半空中跳跃后不能再跳跃,但模型可能会在恐龙在半空中发出跳跃命令,这使得恐龙很容易掉到仙人掌上。

在这种情况下,“落在仙人掌上”的负面反馈实际上是之前跳跃决策的结果,而不是恐龙刚刚在半空中跳跃的结果。

当面临这个问题时,可以引入贴现因子来确定模型在做某事时看起来有多远。间接解决了表扬分配问题。在这个游戏中,当=0.99时,模型意识到当障碍物清除时不小心跳跃会导致它在半空中,当它真正碰到障碍物时无法继续跳跃。

除了这两个参数之外,几乎不需要任何其他参数。

#game parametersGAMMA=0.99 # decay rate of past observations original 0.99OBSERVATION=50000. # timesteps to observe before trainingEXPLORE=100000 # frames over which to anneal epsilonFINAL_EPSILON=0.0001 # final value of epsilonINITIAL_EPSILON=0.1 # starting value of epsilonREPLAY_MEMORY=50000 # number of previous transitions to rememberBATCH=32 # size of minibatchFRAME_PER_ACTION=1

Q-learning了解/复习一下

Python 3.6

Selenium

OpenCV

PIL

Chromium driver for Selenium

Keras

解释一下这些工具。

构建这个AI模型需要用Python编程。游戏是用JavaScript编写的。所以,你需要一些工具来更好地沟通。

Selenium是一种流行的浏览器自动化工具,用于向浏览器发送操作指令和检索各种游戏参数。

现在界面已经完成了,我们需要弄清楚如何获得游戏的截图。Selenium也不错,但它很慢,需要大约一秒钟的时间来截取屏幕截图并处理它们。

PIL和OpenCV允许更好的截图和图像预处理,帧率为5fps。你可能会认为它仍然很慢,但对于这款游戏来说已经足够好了。

你需要准备的是

以下模块实现了Python和浏览器之间的通信(使用Selenium)。

*游戏类:python和浏览器之间的Selenium接口* __init__():使用chrome_options中的属性启动浏览器窗口* get_crash():如果代理在障碍物上崩溃,则返回true。从游戏中获取描述状态的javascript变量* get_playing():如果游戏正在进行中,则为true,如果游戏崩溃或暂停则为false * restart():向浏览器发送一个信号以重启游戏* press_up():向浏览器发送一个单一的press up get * get_score():从javascript变量中获取当前游戏分数。* pause():暂停游戏* resume():恢复暂停的游戏,如果没有崩溃* end():关闭浏览器并结束游戏''类游戏:def __init__(self,custom_config=True): chrome_options=Options() chrome_options.add_argument('disable-infobars') self。_driver=webdriver。Chrome(executable_path=chrome_driver_path,chrome_options=chrome_options) self._driver.set_window_position(x=-10,y=0)Set_window_size (200,300)abspath(TensorFlow后端Keras模型:

#model hyper parametersLEARNING_RATE=1e-4img_rows, img_cols=40,20img_channels=4 #我们堆叠4帧actions=2def buildmodel(): print('现在我们建立模型')model=Sequential()模型。add(Conv2D(32, (8,8), strides=(4,4), padding='same',input_shape=(img_cols,img_rows,img_channels))) #20*40*4 model.add(Activation('relu')) model。add(Conv2D(64, (4,4), strides=(2,2), padding='same')) model.add(Activation('relu')) model.add(Conv2D(64, (3,3), strides=(1,1), padding='same')) model.add(Activation('relu')) model.add(Flatten()) model.add(Dense(512)) model.add(Activation('relu')) model.add(Dense(ACTIONS)) adam=adam (lr=LEARNING_RATE) model.compile(loss='mse',optimizer=adam) print('我们完成构建模型')返回模型

游戏模块

接下来,是时候看到奇迹了~~

也就是说,用一段具有以下任务的代码来训练模型:

未操作时的初始状态(s_t)

0

预测一个行动的效果

在Replay Memory中存储经验

在训练阶段,从Replay Memory中随机选择一组,用它来训练模型

如果游戏结束,就重赛

要了解更多细节,请查看带有自己注释的代码:

参数:* model=待训练的Keras模型* game_state=游戏状态模块,可以访问游戏环境和dino* observe=标志,表示是否要训练模型(权重更新),否则就玩“'def trainNetwork(model,game_state):#在重放内存中存储之前的观察D=deque() #从文件系统加载#通过不做任何事情获得第一个状态do_nothing=np.zero (ACTIONS) do_nothing[0]=1 #0=不做任何事情,#1=跳跃x_t, r_0, terminal=game_state.get_state(do_nothing) #在执行动作s_t=np后获得下一步。stack((x_t, x_t, x_t, x_t), axis=2). shaping (1,20,40,4) # stack 4图像创建占位符输入重塑1*20*40*4观察=观察epsilon=INITIAL_EPSILON t=0而(True): #无尽的运行损失=0 Q_sa=0 action_index=0 r_t=0 #奖励在t a_t=np.zeros([ACTIONS]) #行动在t #选择一个行动epsilon贪心如果random.random()=epsilon:#随机探索一个动作打印('----------随机行动----------')action_index=Random .randrange(ACTIONS) a_t[action_index]=1 else: #预测输出q=model.predict(s_t) #输入一个4张图片的堆栈,得到预测max_Q=np.argmax(q) #选择最大q值的索引action_index=max_Q a_t[action_index]=1 # o=什么都不做,1=jump #如果epsilon FINAL_EPSILON和t我们逐渐减少epsilon(探索参数)观察:epsilon -=(INITIAL_EPSILON - FINAL_EPSILON)/EXPLORE #运行选定的动作和观察下一个状态和奖励x_t1, r_t, terminal=game_state.get_state(a_t) last_time=time.time() x_t1=x_t1。重塑(x_t1。x_t1形状[0]。形状[1],1)#1x20x40x1 s_t1=np。append(x_t1, s_t[:3], axis=3) #将新图像添加到输入堆栈并删除第一张#将转换存储在D.append((s_t, action_index, r_t, s_t1, terminal)) D.popleft() if len(D) REPLAY_MEMORY #只训练如果完成观察;抽样一个minibatch在trainBatch(随机)上进行训练。sample(D, BATCH)) if t OBSERVE s_t=s_t1 t=t1 1 print('TIMESTEP', t,'/EPSILON', EPSILON,'/ACTION', action_index, '/REWARD', r_t,'/Q_MAX ', np.max(Q_sa), '/Loss ', Loss)将此模型应用于从Replay Memory中随机选择的批处理:

def trainBatch(minibatch):for i in range(0, len(minibatch)): loss=0 inputs=np。0(批处理,s_t。s_t形状[1]。形状[3],s_t.形状[3]))#32,20,40,4目标=np. 0((输入)。形状[0]、行动)# 32岁2 state_t=minibatch[我][0]# 4 d堆图像action_t=minibatch[我][1]#这是行动指数reward_t=minibatch[我][2]#奖励在state_t由于action_t state_t1=minibatch[我][3]#下一个状态终端=minibatch[我][4]#天气代理死亡或survided由于操作输入[我1]=[我]=model.predict state_t目标(state_t) #预测q值Q_sa=model.predict (state_t1) #预测下一步的q值如果终端:目标[i, action_t]=reward_t #如果终止,只等于奖励:目标[i, action_t]=reward_t GAMMA * np.max(Q_sa)损失=模型。train_on_batch(inputs, targets)

开始训练

调用下面的方法,开始上面的训练过程:

#argument: observe, only plays if true, else trainsdef playGame(observe=False): game=game () dino=DinoAgent(game) game_state=game_safe (dino,game) model=buildmodel() trainNetwork(model,game_state)

主体方法

对于这个模型,我花了一周的时间训练了200万帧,其中前100万帧用于调整游戏参数和修复bug,后100万帧用于实际训练。

目前,这款机型的最高分是265分。从下图的分数和损失变化图可以看出,模型的损失在最后一百万帧逐渐稳定,相对较低,但随着时间的变化而波动。

比赛的分数

最后100帧的损失

尽管这个模型后来表现得相当不错,但它仍然比人类差得多。

当然,别忘了这家伙很穷,他只有一个i7 CPU。

据他说,模型学得不够快,分数也不够高。这要归咎于几个因素:首先,因为CPU是用来学习的,所以它总是掉帧;二是供AI玩的图像太小,只有4020,在目前的模型架构下可能会导致特征丢失和学习缓慢。

如果你改用GPU,谁知道呢……

是否使用GPU会改善,你可以拿这段代码试试:

https://github.com/ravi72munde/Chrome-Dino-Reinforcement-Learning

原来的地址:

https://medium.com/acing-ai/how-i-build-an-ai-to-play-dino-run-e37f37bdf153

让AI照顾小恐龙和让AI照顾《Flappy Bird》本质上是一样的。如果你想更深入地了解这个问题,这里还有两个。

使用神经网络,遗传算法来旋转Flappy Bird |教程

直接粘贴~

——完成——

真诚招聘

Qubit正在北京中关村招聘编辑/记者。期待有才华、有热情的同学加入我们!详情请在QbitAI对话框回复“招聘”。

QbitAI作者签名的标题号

' 跟踪新的人工智能技术和产品

本文主要介绍了关于chrome小恐龙怎么打开(怎样禁止谷歌浏览器小恐龙)的相关养殖或种植技术,生活常识栏目还介绍了该行业生产经营方式及经营管理,关注生活常识发展动向,注重系统性、科学性、实用性和先进性,内容全面新颖、重点突出、通俗易懂,全面给您讲解生活常识技术怎么管理的要点,是您生活常识致富的点金石。
以上文章来自互联网,不代表本人立场,如需删除,请注明该网址:http://23.234.50.4:8411/article/1489743.html