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 , out_dim):
super(RNN,self).__init__()
self.linear_1 = nn.Linear(input_dim , hidden_dim)
self.linear_2 = nn.Linear(hidden_dim , hidden_dim)
self.linear_3 = nn.Linear(hidden_dim, out_dim) self.relu = nn.ReLU()
self.sigmoid = nn.Sigmoid()
self.hidden_size = hidden_dim def forward(self, input , hidden_input):
input = input.view(1, 1, -1)
hy = self.relu(self.linear_1(input) + self.linear_2(hidden_input))
output = self.sigmoid(self.linear_3(hy))
return output , hy def init_weight(self):
nn.init.normal_(self.linear_1.weight.data , 0 , np.sqrt(2 / 16))
nn.init.uniform_(self.linear_1.bias, 0, 0) nn.init.normal_(self.linear_2.weight.data, 0, np.sqrt(2 / 16))
nn.init.uniform_(self.linear_2.bias, 0, 0) nn.init.normal_(self.linear_3.weight.data , 0 , np.sqrt(2 / 16))
nn.init.uniform_(self.linear_3.bias, 0, 0)
def init_hidden(self):
return torch.zeros([1,1,self.hidden_size]) def train(input_seq , target, encoder , optim , criterion ,max_length):
optim.zero_grad()
hidden = encoder.init_hidden()
encoder_outputs = torch.zeros(max_length)
for ndx in range(max_length):
x_in = torch.Tensor([input_seq[0][ndx] , input_seq[1][ndx]])
output , hidden = encoder(x_in , hidden)
encoder_outputs[ndx] = output[0,0] target = torch.Tensor(target)
loss = criterion(encoder_outputs, target)
loss.backward()
optim.step() return loss , encoder_outputs def trainIter(batch_x , batch_y , encoder , max_length,learning_rate): encoder_optimizer = optim.Adam(encoder.parameters(), lr=learning_rate)
criterion = nn.MSELoss()
loss = 0
predict = np.zeros([batch_size , max_length])
for ndx in range(len(batch_x)):
loss_ , encoder_outputs = train(batch_x[ndx],batch_y[ndx], encoder ,encoder_optimizer,criterion, max_length)
loss += loss_
predict[ndx] = encoder_outputs.detach().numpy()
return loss , predict 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(reversed(s)))
arr = arr.astype(int)
bin_dict[i] = arr
return bin_dict binary_dim = 16
int2binary = getBinDict(binary_dim) def getBatch( batch_size , binary_size):
x = np.random.randint(0,256,[batch_size , 2])
batch_x = np.zeros([batch_size , 2,binary_size] )
batch_y = np.zeros([batch_size , binary_size])
for i in range(0 , batch_size):
batch_x[i][0] = int2binary[x[i][0]]
batch_x[i][1] = int2binary[x[i][1]]
batch_y[i] = int2binary[x[i][0] + x[i][1]]
return batch_x , batch_y , [a + b for a,b in x] def getInt(y , bit_size):
arr = np.zeros([len(y)])
for i in range(len(y)):
for j in range(bit_size):
arr[i] += (int(y[i][j]) * pow(2 , j))
return arr if __name__ == '__main__':
input_size = 2
hidden_size = 8
batch_size = 100
net = RNN(input_size, hidden_size , 1)
net.init_weight()
print(net)
for i in range(100000):
net.zero_grad()
h0 = torch.zeros(1, batch_size, hidden_size)
x , y , t = getBatch(batch_size , binary_dim)
loss , outputs = trainIter(x , y , net , binary_dim , 0.01)
print('iterater:%d loss:%f' % (i, loss))
if i % 100== 0:
output2 = np.round(outputs)
result = getInt(output2,binary_dim)
print(t ,'\n', result) print('iterater:%d loss:%f'%(i , loss))

pytorch rnn 2的更多相关文章

  1. pytorch rnn

    温习一下,写着玩. import torch import torch.nn as nn import numpy as np import torch.optim as optim class RN ...

  2. [PyTorch] rnn,lstm,gru中输入输出维度

    本文中的RNN泛指LSTM,GRU等等 CNN中和RNN中batchSize的默认位置是不同的. CNN中:batchsize的位置是position 0. RNN中:batchsize的位置是pos ...

  3. pytorch --Rnn语言模型(LSTM,BiLSTM) -- 《Recurrent neural network based language model》

    论文通过实现RNN来完成了文本分类. 论文地址:88888888 模型结构图: 原理自行参考论文,code and comment: # -*- coding: utf-8 -*- # @time : ...

  4. pytorch RNN层api的几个参数说明

    classtorch.nn.RNN(*args, **kwargs) input_size – The number of expected features in the input x hidde ...

  5. 机器翻译注意力机制及其PyTorch实现

    前面阐述注意力理论知识,后面简单描述PyTorch利用注意力实现机器翻译 Effective Approaches to Attention-based Neural Machine Translat ...

  6. PyTorch专栏(六): 混合前端的seq2seq模型部署

    欢迎关注磐创博客资源汇总站: http://docs.panchuang.net/ 欢迎关注PyTorch官方中文教程站: http://pytorch.panchuang.net/ 专栏目录: 第一 ...

  7. 混合前端seq2seq模型部署

    混合前端seq2seq模型部署 本文介绍,如何将seq2seq模型转换为PyTorch可用的前端混合Torch脚本.要转换的模型来自于聊天机器人教程Chatbot tutorial. 1.混合前端 在 ...

  8. “你什么意思”之基于RNN的语义槽填充(Pytorch实现)

    1. 概况 1.1 任务 口语理解(Spoken Language Understanding, SLU)作为语音识别与自然语言处理之间的一个新兴领域,其目的是为了让计算机从用户的讲话中理解他们的意图 ...

  9. Pytorch系列教程-使用字符级RNN生成姓名

    前言 本系列教程为pytorch官网文档翻译.本文对应官网地址:https://pytorch.org/tutorials/intermediate/char_rnn_generation_tutor ...

随机推荐

  1. 在Asp.net中为图像加入水印信息

    using System.Drawing; using System.IO; using System.Drawing.Imaging; private void AddTextToImg(strin ...

  2. Hadoop周边生态软件和简要工作原理(一)

    转自:http://www.it165.net/admin/html/201307/1531.html 基本都是在群里讨论的时候,别人问的入门问题,以后想到新的问题再补充进来.但是其实入门问题也很重要 ...

  3. git error Another git process seems to be running in this repository

    How to fix error Another git process seems to be running in this repository When you use Git, you se ...

  4. 【BZOJ】1629: [Usaco2007 Demo]Cow Acrobats(贪心+排序)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1629 这题我想了很久都没想出来啊... 其实任意两头相邻的牛交换顺序对其它牛是没有影响的.. 那么我 ...

  5. 单引號转义符q’的使用

    当字符串包括单引號时,能够使用转义符q'对单引號进行转义. q'后面的字符能够是:     !     [ ]     { }     ( )     < > 前提是这些字符不会出如今兴许 ...

  6. C# 将MSMQ消息转换成Json格式

    PS:主要就是一个配置文件和一个转换函数 配置文件app.config  之前要ADD reference -->   system.configuration & using.syst ...

  7. PHP时间戳 strtotime()使用方法和技巧

    在php中我想要获取时间戳有多种方法,最常用的就是使用time函数与strtotime()函数把日期转换成时间戳了, 下面我来给大家分享一下时间戳函数 strtotime用法. 获取指定的年月日转化为 ...

  8. IE8 frameset SESSION丢失

    IE8 使用 frameset后,子页面,脚本触发父页面js函数, 如果使用 window.parent.location.href 跳转,则session会丢失 使用 window.location ...

  9. 用户控件(ASCX)向网页(ASPX)传值使用反射实现

    用户控件向网页传递值,方法非常之多,此博文尝试使用反射来实现.在站点中,建一个网页以及一个用户控件. 网页切换至设计模式,拉用户控件至网页上. Default.aspx: <%@ Page La ...

  10. JavaScript 二、eval 和 with 函数

    /* * ========================================================= * * JavaScript 词法欺骗 * * 1.欺骗词法作用域,会导致 ...