Leetcode刷题复盘
66. 加一(简单)
题目描述:
给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位,数组中每个元素只存储单个数字。你可以假设除了整数000之外,这个整数不会以零开头。
题解:从最后一位开始+1+1+1,如果+1+1+1之后结果等于101010,则需要进位,前一位继续+1+1+1,如果没有等于101010则退出。
如果第一位为0,说明溢出了,则需要新开一个n+1n+1n+1的数组,第n+1n+1n+1位为1,其他为digitsdigitsdigits中结果。
class Solution { public int[] plusOne(int[] digits) { int n = digits.length; int [] result = new int[n+1]; for(int i = n-1 ; i>= 0 ; i--) { digits[i] +=1; if(digits[i] == 10) ...
Pytorch强化学习算法实现
使用Pytorch框架实现了强化学习算法Policy Gradient/DQN/DDGP
Policy Gradient算法实现
Policy Gradient算法的思想在另一篇博客中有介绍了,下面是算法的具体实现。
Policy网络
两个线性层,中间使用Relu激活函数连接,最后连接softmax输出每个动作的概率。
class PolicyNet(nn.Module): def __init__(self,n_states_num,n_actions_num,hidden_size): super(PolicyNet, self).__init__() self.data = [] #存储轨迹 #输入为长度为4的向量 输出为向左 向右两个动作 self.net = nn.Sequential( nn.Linear(in_features=n_states_num, out_features=hidden_size, bias=False), nn.ReLU(), ...
PyTorch常用工具模块
在训练神经网络过程中,需要用到很多工具,其中最重要的三部分是:数据、可视化和GPU加速。本章主要介绍Pytorch在这几方面的工具模块,合理使用这些工具能够极大地提高编码效率。
数据处理
在解决深度学习问题的过程中,往往需要花费大量的精力去处理数据,包括图像、文本、语音或其它二进制数据等。数据的处理对训练神经网络来说十分重要,良好的数据处理不仅会加速模型训练,更会提高模型效果。考虑到这点,PyTorch提供了几个高效便捷的工具,以便使用者进行数据处理或增强等操作,同时可通过并行化加速数据加载。
数据加载
在PyTorch中,数据加载可通过自定义的数据集对象。数据集对象被抽象为Dataset类,实现自定义的数据集需要继承Dataset,并实现两个Python魔法方法:
__getitem__:返回一条数据,或一个样本。obj[index]等价于obj.__getitem__(index)
__len__:返回样本的数量。len(obj)等价于obj.__len__()
这里我们以Kaggle经典挑战赛"Dogs vs. Cat"的数据为例,来了解如何处理数据 ...
Pytorch中神经网络工具箱nn模块
torch.nn专门为深度学习而设计的模块。
torch.nn的核心数据结构是Module,它是一个抽象概念,既可以表示神经网络中的某个层(layer),也可以表示一个包含很多层的神经网络。在实际使用中,最常见的做法是继承nn.Module,撰写自己的网络层.
使用torch.nn实现全连接层
import torch from torch import nnfrom torch.autograd import Variable class Linear(nn.Module): # 继承nn.Module def __init__(self, in_features, out_features): super(Linear, self).__init__() # 等价于nn.Module.__init__(self) self.w = nn.Parameter(torch.randn(in_features, out_features)) self.b = nn.Parameter(torch.randn(out_features)) ...
Pytorch中的Autograd
介绍Pytorch中的自动微分系统(Autograd)
用Tensor训练网络很方便,但从上一小节最后的线性回归例子来看,反向传播过程需要手动实现。这对于像线性回归等较为简单的模型来说,还可以应付,但实际使用中经常出现非常复杂的网络结构,此时如果手动实现反向传播,不仅费时费力,而且容易出错,难以检查。torch.autograd就是为方便用户使用,而专门开发的一套自动求导引擎,它能够根据输入和前向传播过程自动构建计算图,并执行反向传播。
计算图(Computation Graph)是现代深度学习框架如PyTorch和TensorFlow等的核心,其为高效自动求导算法——反向传播(Back Propogation)提供了理论支持,了解计算图在实际写程序过程中会有极大的帮助。本节将涉及一些基础的计算图知识,但并不要求读者事先对此有深入的了解。
Variable
PyTorch在autograd模块中实现了计算图的相关功能,autograd中的核心数据结构是Variable。Variable封装了tensor,并记录对tensor的操作记录用来构建计算图。Variable的数据结构如图所 ...
Pytorch中的Tensor
介绍Pytorch中的张量系统(Tensor)
Tensor
from __future__ import print_functionimport torch as tt.__version__
基础操作
从接口的角度来讲,对tensor的操作可分为两类:
torch.function,如torch.save等。
另一类是tensor.function,如tensor.view等。
为方便使用,对tensor的大部分操作同时支持这两类接口,在本书中不做具体区分,如torch.sum (torch.sum(a, b))与tensor.sum (a.sum(b))功能等价。
而从存储的角度来讲,对tensor的操作又可分为两类:
不会修改自身的数据,如 a.add(b), 加法的结果会返回一个新的tensor。
会修改自身的数据,如 a.add_(b), 加法的结果仍存储在a中,a被修改了。
函数名以_结尾的都是inplace方式, 即会修改调用者自己的数据,在实际应用中需加以区分。
创建Tensor
函数
功能
Tensor(*sizes)
基础构造函 ...
PyTorch入门知识
PyTorch的简洁设计使得它入门很简单,在深入介绍PyTorch之前,本节将先介绍一些PyTorch的基础知识,使得读者能够对PyTorch有一个大致的了解,并能够用PyTorch搭建一个简单的神经网络。
Tensor
Tensor是PyTorch中重要的数据结构,可认为是一个高维数组。它可以是一个数(标量)、一维数组(向量)、二维数组(矩阵)以及更高维的数组。Tensor和Numpy的ndarrays类似,但Tensor可以使用GPU进行加速。Tensor的使用和Numpy及Matlab的接口十分相似。(与Tensorflow中的Tensorflow基本相同)
构建 5x3 矩阵,只是分配了空间,未初始化
# 构建 5x3 矩阵,只是分配了空间,未初始化x = t.Tensor(5, 3) [output]:1.00000e-07 * 0.0000 0.0000 5.3571 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 5.4822 0.0000 5.4823 0.0000 5.4823[ ...
Tensorflow与强化学习
使用tensorflow框架实现强化学习算法,其中包括Policy Gradient ,A3C,DQN等算法
强化学习算法实例
平衡杆游戏
衡杆游戏系统包含了三个物体:滑轨、小车和杆。如图 ,小车可以自由在
滑轨上移动,杆的一侧通过轴承固定在小车上。在初始状态,小车位于滑轨中央,杆竖直
立在小车上,智能体通过控制小车的左右移动来控制杆的平衡,当杆与竖直方向的角度大
于某个角度或者小车偏离滑轨中心位置一定距离后即视为游戏结束。游戏时间越长,游戏 给予的回报也就越多,智能体的操控水平也越高。
为了简化环境状态的表示,我们这里直接取高层的环境特征向量𝑠作为智能体的输入,它一共包含了四个高层特征,分别为:小车位置、小车速度、杆角度和杆的速度。智能体的输出动作𝑎为向左移动或者向右移动,动作施加在平衡杆系统上会产生一个新的状态, 同时系统也会返回一个奖励值,这个奖励值可以简单的记为 1,即时长加一。在每个时间 戳𝑡上面,智能体通过观察环境状态𝑠𝑡而产生动作𝑎𝑡,环境接收动作后状态改变为𝑠𝑡+1,并返回奖励𝑟 。
Gym 平台
一般来说,在 Gym 环境中创建游戏并 ...
强化学习基础理论
强化学习基础理论。强化学习(Reinforcement learning),与监督学习,无监督学习是类似的,是一种统称的学习方式。它主要利用智能体与环境进行交互,从而学习到能获得良好结果的策略。与有监督学习不同,强化学习的动作并没有明确的标注信息,只有来自环境的反馈的奖励信息,它通常具有一定的滞后性,用于反映动作的“好与坏”。
知识结构
定义
强化学习(Reinforcement learning),与监督学习,无监督学习是类似的,是一种统称的学习方式。它主要利用智能体与环境进行交互,从而学习到能获得良好结果的策略。与有监督学习不同,强化学习的动作并没有明确的标注信息,只有来自环境的反馈的奖励信息,它通常具有一定的滞后性,用于反映动作的“好与坏”。
参考资料:
https://zh.wikipedia.org/wiki/强化学习
基础理论
基本概念
4 个主要概念:环境状态(S)、动作(A)和奖惩(R), 转移函数(P)。
机器感知到的环境描述构成环境状态(S),机器采取的动 作构成了动作空间(A),潜在的转移函数(P)使环境从当前 的状态转移到另一个状态,在转 ...
Tensorflow与自编码器
使用Tensorflow实现自编码器
自编码器原理
Fashion MNIST 图片重建实战
自编码器算法原理非常简单,实现方便,训练也较稳定,相对于 PCA 算法,神经网络 的强大表达能力可以学习到输入的高层抽象的隐藏特征向量𝒛,同时也能够基于𝒛重建出输入
Fashion MNIST 数据集
利用keras.datasets.fashion_mnist.load_data()函数即可在线下载、管理和加载。
# 加载Fashion MNIST图片数据集(x_train, y_train), (x_test, y_test) = keras.datasets.fashion_mnist.load_dat a()# 归一化x_train, x_test = x_train.astype(np.float32) / 255., x_test.astype(np.float3 2) / 255.# 只需要通过图片数据即可构建数据集对象,不需要标签train_db = tf.data.Dataset.from_tensor_slices(x_train)train_db ...