DQN的学习和实践

news/2024/5/19 1:39:48 标签: 深度学习, 神经网络, 机器学习, 强化学习

 

在目前的学习中 DQN是比较牛的

专家也说 强化学习接近通用人工智能

Q_learning 列出了可能的action 和state对应的Q数值,然后在某个状态得到后,只需按照该状态下的最大Q值一直动作下去,就能得到最大的收益

但是如果q_lable不足以写出那么多状态和动作

也就是没有一个表格可以存储足够的Q值

那么就可以和深度学习结合在一起了,所谓的深度学习,就是根据输入的状态(在愤怒的小鸟中就是输入图像)然后经过卷积全连接得到了动作对应的Q数值,那么网络可以得到Q数值

因此可以形成( st at reword st+1 是否结束)等数组就可以通过深度学习得到了

经过训练,一个神经网络负责更新真实Q数值  r+a(Q(s* a*))

另外一哥神经网络负责得到逼近的Q值  Q(s a)

那么两个的差距就是LOSS目标

然后梯度清零 单项迭代可以使得loss数值不断的降低 部分的结果如下所示

 

然后保存训练的参数

进而当测试的时候 可以调用其中的参数 进行测试 得到动作数值 执行动作 进而不断的得到reword的参数数值

图 首次的愤怒小鸟图 和标准化的结果图

 

部分代码注释

game_state = FlappyBird()##随机生成小鸟的图像
    plt.figure()
    image, reward, terminal = game_state.next_frame(0)##得到了下一帧的图像
    plt.subplot(121)
    plt.imshow(image)
    image = pre_processing(image[:game_state.screen_width, :int(game_state.base_y)], opt.image_size, opt.image_size)##进行预处理
    image = torch.from_numpy(image)
    
    data=image
    #plt.imshow(data.numpy()[:, :, 0].squeeze(), cmap=plt.cm.gray_r)
    plt.subplot(122)
    plt.imshow(image.T)
    plt.title('原始的')
    plt.show()
    
    if torch.cuda.is_available():
        model.cuda()
        image = image.cuda()
    state = torch.cat(tuple(image for _ in range(4)))[None, :, :, :]
    #print('statesize={}'.format(state.shape)) 1 4 84 84
    replay_memory = []
    iter = 0
    while iter < opt.num_iters:
        prediction = model(state)[0]##获得得到的第一个数值 也就是Q表格当中的q数值 也就是在state采取action的q数值
        # Exploration or exploitation
        epsilon = opt.final_epsilon + (
                (opt.num_iters - iter) * (opt.initial_epsilon - opt.final_epsilon) / opt.num_iters)
        u = random()
        random_action = u <= epsilon
        
        if random_action:
            print("Perform a random action")
            action = randint(0, 1)
        else:

            action = torch.argmax(prediction).item()
        #print('randomeacton={},//epsilon={},//prediction={},//action={}'.format(random_action,epsilon,prediction,action  ))
        
        
        next_image, reward, terminal = game_state.next_frame(action)
        next_image = pre_processing(next_image[:game_state.screen_width, :int(game_state.base_y)], opt.image_size,
                                    opt.image_size)
        next_image = torch.from_numpy(next_image)
        if torch.cuda.is_available():
            next_image = next_image.cuda()
        
        next_state = torch.cat((state[0, 1:, :, :], next_image))[None, :, :, :]
        
        replay_memory.append([state, action, reward, next_state, terminal])
        if len(replay_memory) > opt.replay_memory_size:## default=50000 如果超过这个长度的化 那么就不接下来继续存储下去了
            del replay_memory[0]
            
        batch = sample(replay_memory, min(len(replay_memory), opt.batch_size))##s随机选择batchsize大小的快,如果剩下的快不足够batchsize
        #的大小 那么就剩下的样本都取出来
        


http://www.niftyadmin.cn/n/1682129.html

相关文章

cer pem 证书转换_阿里云个人网站免费绑定SSL证书(超详细图文教程)

前言一年前搭建了个人网站&#xff0c;由于个人小程序绑定必须需要绑定HTTPS&#xff0c;于是乎绑定了SSL证书&#xff0c;最近阿里云一直在提醒SSL证书一年到期&#xff0c;提示续费&#xff1b;SSL证书续费几千&#xff0c;于是乎查找方案&#xff0c;阿里云提供个人免费SSL证…

adb shell读取返回值_android代码执行adb shell终端命令(linux命令)并返回执行结果...

在做Android开发板相关的开发需求的时候&#xff0c;我们有的时候需要去到Android系统的一个linux终端(adbshell)里面来执行一些命令&#xff0c;以便于查看部分文件内容或者修改部分文件权限等需求&#xff0c;通常我们可以使用Android studio自带的terminal工具运行先adb she…

32岁入行网络运维跟java哪个适合_python和java到底有什么区别

人生苦短&#xff0c;我用Python&#xff0c;为啥这么说&#xff0c;因为我们码农圈有金句&#xff1a;学完Python&#xff0c;便可上天~首先我要向各位坦诚&#xff0c;我对Python的喜爱也是从几年以前才开始的。不经历长期的痛苦教训&#xff0c;我们是不会对这门语言以及它的…

谈谈那些图像变化的技巧

地铁总 风阀的状态是容易得到监控的 在现有的iscs系统中&#xff0c;他们可以看到风阀的状态&#xff0c;但是往往就地级别的状态和ISCS的状态有不一致的情况&#xff0c; 所以查到真实的状态尤其重要 在学习的过程中 常常遇到图像变化 图像变化的方法太多了&#xff0c;比如…

vsflexgrid 最后一行 求和_excel工作表的行或列怎么自动求和

利用EXCEL软件的功能进行自动求和&#xff0c;能起到事半功倍的效果&#xff0c;这个经验是用来介绍怎么使用EXCEL工作表进行行或列的自动求和&#xff0c;一般可以直接利用自动求和工具栏选项&#xff0c;再有就是利用插入函数求和也可以做到&#xff0c;用习惯了你会离不开这…

【无标题】np.concatenate((n1,n2),axis = 0) 矩阵合并

n1 np.random.randint(1,100,(4,3)) 生成1 -100之间的随机整数 np.vstack((n1,n2)) # 或者&#xff08;axis 0 表示列&#xff09; np.concatenate((n1,n2),axis 0)

ie11 无法启动java,Windows 10上的IE11无法启动JNLP文件

Since May 9, after a windows 10 update, on IE11 11.0.40, JNLP files wont launch from IE, but in a computer with IE version 11.0.34 it work perfectly.Any ideas?Thanks in advance解决方案I had a problem opening a jnlp file, no matter what, trying to associat…

boot spring 接口接收数据_SpringBoot请求网页接口数据返回JSON,并存入本地数据库...

GetJson文件 public class GetJson {public JSONObject getHttpJson(String url, int comefrom) throws Exception {try {URL realUrl new URL(url);HttpURLConnection connection (HttpURLConnection) realUrl.openConnection();connection.setRequestProperty("accept…