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. H&M

    H&M于1947年由Erling Persson在瑞典创立.如今,H&M在全世界1500 多个专卖店销售服装.配饰与化妆品.位于瑞典市Stora Gatan大街的老H&M店是世 ...

  2. 带清空按钮TextBox的实现(WPF)

    本博文针对人群:WPF新手.博文内容:通过Style制定包含清空Button的TextBox样式模板,通过在Style中引入自定义类的附加属性完成对TextBox的内容清空. <span sty ...

  3. 修改Android 界面颜色

    btnGetCode.setTextColor(getResources().getColor(R.color.dark_white)); Color.parseColor("#1a71d4 ...

  4. InstallSheild 获取系统环境变量,如Desktop路径等

    使用FOLDER_DESKTOP变量获取的桌面路径可能为:C:\Users\Public\Desktop 而不是C:\Users\用户\Desktop Copy and paste the follo ...

  5. Linux网卡命名enp3s0说明

    用了很多年Linux的我在升级Ubuntu 16.04之后竟然发现我的以太网卡的名字竟然不是eth0,变成了enp3s0,每次想要修改什么配置,都要先ifconfig查一下网卡名,真是让我很郁闷! 去 ...

  6. 微擎app端上传图片后删除不了图片

    相信在微擎开发的哥们都知道, 微擎在手册方面还是有点坑的,根本不让人活啊.没办法, 开发时, 只能自己看着源码来搞>>>> 好, 不多说了. 现在来看一个坑  ..直接上代码\ ...

  7. js修改剪切板内容的方法

    代码如下: //绑定在了body上,也可以绑定在其他可用元素行,但是不是所有元素都支持copy事件. $(document.body).bind({ copy: function(e) {//copy ...

  8. Java连接MongoDB样例

    package com.moonlit.example; import com.mongodb.BasicDBObject; import com.mongodb.BulkWriteOperation ...

  9. centos7 install k8s centos 安装 kubernetes 详细

    参考: http://blog.opskumu.com/k8s-cluster-centos7.html https://ylinux.org/note/article/1207 http://mub ...

  10. Objective-C代码学习大纲(2)

    2011-05-11 14:06 佚名 otierney 字号:T | T 本文为台湾出版的<Objective-C学习大纲>的翻译文档,系统介绍了Objective-C代码,很多名词为台 ...