基于深度强化学习的绘画智能体 代码分析

本文详细解读了基于深度强化学习的绘画智能体代码,重点解析了actor.py中的Resnet结构,包括卷积层参数、BasicBlock和Bottleneck模块。讨论了Resnet如何通过跃层连接解决深度网络中的梯度消失问题,使得梯度能直接从输出层传递到输入层,提高了网络性能。
摘要由CSDN通过智能技术生成

基于深度强化学习的绘画智能体 代码详解

Github源码链接

actor.py

  1. 导入库
import numpy as np
import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.nn.utils.weight_norm as weightNorm

from torch.autograd import Variable
import sys

  1. 定义3*3的二维卷积模板
def conv3x3(in_planes, out_planes, stride=1):  
    return (nn.Conv2d(in_planes, out_planes, kernel_size=3, stride=stride, padding=1, bias=False))
  • nn.Conv2d()详解
    1.kernel_size:卷积核的大小,一般我们会使用5x5、3x3这种左右两个数相同的卷积核,因此这种情况只需要写kernel_size = 5这样的就行了。如果左右两个数不同,比如3x5的卷积核,那么写作kernel_size = (3, 5),注意需要写一个tuple,而不能写一个列表(list)。
    2.stride:步幅,卷积核两次卷积左上角点之间的距离;通俗讲就是卷积核每隔几个像素进行一次卷积操作
    3.padding:=0时,不填充,原图与卷积核进行卷积;=1时,在原图四边填充一行(一列),具体填充的数据由padding_mode控制,一般填0)
    4.bias:偏差,会在网络训练后向传播过程中,给输出加上一个学得的偏差
  1. 定义基础模块BasicBlock
class BasicBlock(nn.Module):
    expansion = 1
//定义两个3∗33∗3的卷积,然后进行BatchNorm2d(使得一批Batch满足均值为0,方差为1的分布)
    def __init__(self, in_planes, planes, stride=1):
        super(BasicBlock, self).__init__()
        self.conv1 = conv3x3(in_planes, planes, stride)
        self.bn1 = nn.BatchNorm2d(planes)
        self.conv2 = conv3x3(planes, planes)
        self.bn2 = nn.BatchNorm2d(planes)
        

//shortcut是为了防止梯度发散而跨越一个或多个层,允许梯度直接反向传播到更浅的层。
        self.shortcut = nn.Sequential() //输入和输出维度匹配的情况
        

//输入和输出维度不匹配的情况(需要借助conv+bn将输入尺寸降低)
        if stride != 1 or in_planes != self.expansion * planes:
            self.shortcut = nn.Sequential(
                (nn.Conv2d(in_planes, self.expansion*planes, kernel_size=1, stride=stride, bias=False)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值