Seq2Seq
Seq2Seq 以往的循环神经网络,输入的是不定长的序列,输出确是定长的,我们选取最长词并通过对短的词扩充来实现输出定长。但有些问题的输出不是定长的,以机器翻译为例,输入一段英语,输出对应法文,输入和输出大概率不定长,比如 英文:Beat it. 法文:Dégage ! 英文:Call me. 法文:Appelle-moi ! 当输入输出序列不定长时,我们可以采用编码器-解码器(encoder-decoder)或Seq2Seq实现。 论文参考:https://arxiv.org/abs/1409.3215 编码器-解码器 编码器和解码器分别对应输入序列和输出序列的两个循环神经网络。 编码器 编码器将长度可变的输入序列转换成形状固定的上下文变量,并且将输入序列的信息在该上下文变量中进行编码。 假设输入序列是\(x_1,x_2,x_3...x_T\) ,其中\(x_t\)是输入文本序列中第t个词原,用\(h_t\) 来表示上一时间的隐藏状态,用函数\(f\)来描述为 \[ h_t=f(x_t,h_t−1) \] 编码器的背景向量 \[ c =...
AutoEncoder
AutoEncoder 自编码 AutoEncoder 是一种无监督学习的算法,他利用反向传播算法,让目标值等于输入值。 比如对于一个神经网络,输入一张图片,通过一个 Encoder 神经网络,输出一个比较 "浓缩的"feature map。之后将这个 feature map 通过一个 Decoder 网络,结果又将这张图片恢复。 如果说我们的数据集特别大,对于直接训练而言性能肯定较低。但如果我们对数据特征进行提取,缩减输入信息量,学习起来就相对轻松。 简单模型 下面是一个AutoEncoder的三层模型,其中 \(W^* = W^T\) 2010年,Vincent 在论文中表明,只用单组W就可以,所以W*没有必要去训练。 http://jmlr.org/papers/volume11/vincent10a/vincent10a.pdf 如果实数作为输入,损失函数为 \(L(f(x)) = {1\over2}\sum_{k}(\hat x_k - x_k)^2\) PCA 和...
Linux CMake工程目录结构
Linux CMake工程目录结构 主文件目录 1234./lib/./src/./build./CMakeLists.txt ./CMakeLists.txt 12345678CMAKE_MINIMUM_REQUIRED( VERSION 3.10 )PROJECT(MAIN)ADD_SUBDIRECTORY(./lib )ADD_SUBDIRECTORY(./src) ./lib/CMakeLists.txt 12345AUX_SOURCE_DIRECTORY(. DIR_LIB_SRCS)SET(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)ADD_LIBRARY(LIB STATIC ${DIR_LIB_SRCS}) ./src/CMakeLists.txt 12345678910INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/lib) SET(EXECUTABLE_OUTPUT_PATH...
C++主存层面数据交换
C++ 互换指针指向内存结果 1. 互换指针指向内存结果 将命令参数前两个值在主存中互换并输出。 1234567891011121314#include <iostream>#include "mySwap.hpp"int main(int argc, char** argv){ std::cout<<"Origin info is: "<<std::endl; std::cout<<"a: "<<argv[1]<<" \tb: "<<argv[2]<<std::endl; mySwap(argv[1],argv[2]); std::cout<<"Has been swaped info is: "<<std::endl; std::cout<<"a:...
Sentiment Analysis For RNN
Sentiment Analysis For RNN 循环神经网络进行情感分析 引言: 对于情感分析,如果简化来看可以分为正向情绪和负向情绪,我们可以将情感分析视为文本分类任务,因此我们可以将预训练的词向量应用于情感分析。我们可以用预训练的GloVe模型表示每个标记,并反馈到RNN中。 RNN表征文本 在文本分类任务中,要将可变长度的文本序列转为固定长度。可以通过nn.Embedding()函数获得单独的预训练GloVe,再去通过双向LSTM,最后在去通过一个全连接层做一个二分类,即可实现RNN表征文本。 123self.embedding = nn.Embedding(vocab_size, embed_size)self.encoder = nn.LSTM(embed_size, num_hiddens, num_layers=num_layers,bidirectional=True)self.decoder = nn.Linear(4 * num_hiddens, 2) 1234embeddings =...
VGG16实现分类任务
VGG16实现分类任务 VGG是2014年由牛津大学著名研究组VGG(Visual Geometry Group)提出,斩获当年ImageNet竞赛中定位任务第一名和分类任务第二名。 原理图 20211107_1 原理简述 例如有张224x224的RGB图片,我们让他通过两个卷积核为3的卷积层,再通过最大池化层(核尺寸为2,步距为2)。至于卷积层的输入输出维度,参考下图,我们一般常用VGG16模型,最终用多个FC实现分类,也可将FC换成卷积核为1的卷积层。 数据集 同样选用本人常用的海贼王数据集来测试,可以根据个人需求修改。 下面提供一个简单数据集。 Kaggle的鸟儿分类数据集,共315个分类 https://www.kaggle.com/gpiosenka/100-bird-species 可以用kaggle命令选择下载 1kaggle datasets download -d...
Perceptron
Perceptron 原理 简单的感知机可以看作一个二分类,假定我们的公式为 f(x) = sign(w *x + b) 我们把 -b 做为一个标准,w* x 的结果与 -b 这个标准比较, w*x > -b, f(x) = +1 w *x < -b, f(x) = -1 不难看出w是超平面的法向量,超平面上的向量与w的数量积为0。因此这个超平面就可以很好的区分我们的数据集。 而感知机就是来寻找w和b 优化方法 优化方法我们现有的方法比较多,诸如GD、SGD、Minibatch、Adam 当然我们的损失函数也包含多种,常见的有MSE,...
SoftMax指北
SoftMax指北 softmax函数,又称归一化指数函数。是将多分类的结果用概率的形式表示出来,而各种预测结果概率和为1,下图为SoftMax的计算方法。 e的zi次方保证了结果非负,除以总和保证了总和为1,这样就可以得出近似的概率。 代码示例 这边选用Fashion-Mnist作为示例. 第一步下载数据集 1234train_data = torchvision.datasets.FashionMNIST("./data/mnist",train=True,download=True)train_loader = torch.utils.data.DataLoader(train_data,batch_size = 8, shuffle = True)val_data = torchvision.datasets.FashionMNIST("./data/mnist",train=False,download=True)val_loader =...