pytorch rnn
温习一下,写着玩。
import torch
import torch.nn as nn
import numpy as np
import torch.optim as optim
class RNN(nn.Module):
def __init__(self,input_dim , hidden_dim):
super(RNN,self).__init__()
self._rnn = nn.RNN(input_size = input_dim , hidden_size= hidden_dim )
self.linear = nn.Linear(hidden_dim , 1)
self.relu = nn.ReLU()
def forward(self , _in):
layer1 , h = self._rnn(_in)
layer2 = self.relu(self.linear(self.relu(layer1)))
return layer2
def init_weight(self):
nn.init.normal_(self.linear.weight.data , 0 , np.sqrt(2 / 16))
nn.init.uniform_(self.linear.bias, 0, 0)
def getBinDict(bit_size = 16):
max = pow(2,bit_size)
bin_dict = {}
for i in range(max):
s = '{:016b}'.format(i)
arr = np.array(list(s))
arr = arr.astype(int)
bin_dict[i] = arr
return bin_dict
binary_dim = 16
int2binary = getBinDict(binary_dim)
def getBatch( batch_size):
x = np.random.randint(0,256,[batch_size , 2])
x_arr = np.zeros([binary_dim , batch_size , 2 ] , dtype=int)
y_arr = np.zeros([binary_dim,batch_size,1] , dtype=int)
for i in range(0 , binary_dim):
batch_x_arr = np.zeros([batch_size,2] , dtype=int)
batch_y_arr = np.zeros([batch_size,1] , dtype=int)
for j in range(len(x)):
batch_x_arr[j] =[int2binary[int(x[j][0])][i] , int2binary[int(x[j][1])][i]]
batch_y_arr[j] =[int2binary[ int(x[j][0]) + int(x[j][1])][i]]
#此处要翻转,rnn处理时是从下标为0处开始,所以要把二进制的高低位翻转
y_arr[binary_dim - i - 1] = batch_y_arr
x_arr[binary_dim - i - 1] = batch_x_arr
return x_arr , y_arr , x
def getInt(y , bit_size):
arr = np.zeros([len(y[0])])
for i in range(len(y[0])):
for j in range(bit_size):
arr[i] += (int(y[j][i][0]) * pow(2 , j))
return arr
if __name__ == '__main__':
input_size = 2
hidden_size = 8
batch_size = 100
net = RNN(input_size, hidden_size)
net.init_weight()
print(net)
optimizer = optim.Adam(net.parameters(), lr=0.01, weight_decay=1e-4)
loss_function = nn.MSELoss()#.CrossEntropyLoss()
for i in range(100000):
net.zero_grad()
x ,y , t = getBatch(batch_size)
in_x = torch.Tensor(x)
y = torch.Tensor(y)
output = net(in_x)
loss = loss_function(output , y)
loss.backward()
optimizer.step()
if i % 100== 0:
output2 = torch.round(output)
result = getInt(output2,binary_dim)
print(t , result)
print('iterater:%d loss:%f'%(i , loss))
pytorch rnn的更多相关文章
- pytorch rnn 2
import torch import torch.nn as nn import numpy as np import torch.optim as optim class RNN(nn.Modul ...
- [PyTorch] rnn,lstm,gru中输入输出维度
本文中的RNN泛指LSTM,GRU等等 CNN中和RNN中batchSize的默认位置是不同的. CNN中:batchsize的位置是position 0. RNN中:batchsize的位置是pos ...
- pytorch --Rnn语言模型(LSTM,BiLSTM) -- 《Recurrent neural network based language model》
论文通过实现RNN来完成了文本分类. 论文地址:88888888 模型结构图: 原理自行参考论文,code and comment: # -*- coding: utf-8 -*- # @time : ...
- pytorch RNN层api的几个参数说明
classtorch.nn.RNN(*args, **kwargs) input_size – The number of expected features in the input x hidde ...
- 机器翻译注意力机制及其PyTorch实现
前面阐述注意力理论知识,后面简单描述PyTorch利用注意力实现机器翻译 Effective Approaches to Attention-based Neural Machine Translat ...
- PyTorch专栏(六): 混合前端的seq2seq模型部署
欢迎关注磐创博客资源汇总站: http://docs.panchuang.net/ 欢迎关注PyTorch官方中文教程站: http://pytorch.panchuang.net/ 专栏目录: 第一 ...
- 混合前端seq2seq模型部署
混合前端seq2seq模型部署 本文介绍,如何将seq2seq模型转换为PyTorch可用的前端混合Torch脚本.要转换的模型来自于聊天机器人教程Chatbot tutorial. 1.混合前端 在 ...
- “你什么意思”之基于RNN的语义槽填充(Pytorch实现)
1. 概况 1.1 任务 口语理解(Spoken Language Understanding, SLU)作为语音识别与自然语言处理之间的一个新兴领域,其目的是为了让计算机从用户的讲话中理解他们的意图 ...
- Pytorch系列教程-使用字符级RNN生成姓名
前言 本系列教程为pytorch官网文档翻译.本文对应官网地址:https://pytorch.org/tutorials/intermediate/char_rnn_generation_tutor ...
随机推荐
- zend Studio10.6.2破解注册码
下载破解包:http://download.csdn.net/detail/gsls200808/7982115 安装方法:破解的jar文件com.zend.verifier_10.6.2.v2014 ...
- VSS (Visual Source Safe 2005) 用法详解
VSS用法指南 The usage of VSS (Visual Source Safe 2005) 1. 首先,当然是得安装好Visual Source Safe 2005 你可以在Visual S ...
- 关于Unity中的transform组件(二)
在Scene视图中的蓝色网格,每一格默认是1米 一.沿着Z轴每秒移动10米 Transform cube_trans; void start(){ this.cube_trans=this.trans ...
- Myeclipse 10 Maven 构建 Java Web 项目
主要介绍如何使用 Myeclipse 10 构建 Maven Web 项目,关于 Maven 的介绍就略过了. 工具/原料 myeclipse apache-maven-3.1.0 方法/步骤 1 下 ...
- Asp.net中的Cache--HttpRuntim.Cache 和 HttpContext.Current.Cache
在ASP.NET中有两个类都提供缓存支持, 一个是HttpRuntime类的Cache属性, 另一个是HttpContext类的Cache属性. 通过查看这两个属性的类型可以发现其实这两个属性都是Sy ...
- hdu 1198 Farm Irrigation(深搜dfs || 并查集)
转载请注明出处:viewmode=contents">http://blog.csdn.net/u012860063?viewmode=contents 题目链接:http://acm ...
- Scilab 的画图函数(3)
我们在做数据画图或函数图像时常常须要使用对数坐标系.尤其是数据的范围跨越非常多个数量级时.通常的线性坐标系下无法表现出数据特征. Scilab 中Plot函数无法画出对数坐标.须要使用 plot2d ...
- Linux产生随机数的几种常见方法
方法1: [root@localhost ~]# echo $RANDOM 方法二 [root@localhost ~]# openssl rand -base64 7X6HMer5hhY= 方法三 ...
- Git 安装与使用
http://blog.csdn.net/lishuo_os_ds/article/details/8078475#sec-1.8.2 http://blog.csdn.net/showhilllee ...
- HDU 5900 QSC and Master
题目链接:传送门 题目大意:长度为n的key数组与value数组,若相邻的key互斥,则可以删去这两个数同时获得对应的两 个value值,问最多能获得多少 题目思路:区间DP 闲谈: 这个题一开始没有 ...