TensorFlow
风华明远
目前研究Tensorflow 以及 tkinter
展开
-
用Mittens实现Glove算法 - 如何实现初始化固定
在mittens.GloVe中使用固定的初始化参数。原创 2022-07-29 11:18:49 · 361 阅读 · 5 评论 -
Katz平滑的实现
Katz平滑的讲解可参见:https://zhuanlan.zhihu.com/p/100256789。本文是实现了该文章的示例。具体的Katz平滑有时间会把自己的理解写一下。看代码可能会有助于理解文章的内容。import tensorflow as tfimport collectionsclass Katz(): def __init__(self): self.words_uni = collections.defaultdict(int) self.wo原创 2021-03-08 13:17:39 · 816 阅读 · 0 评论 -
tensorflow 二元模型(bigram)实现
统计语言模型N-gram中,二元模型是比较简单的。比如“this was a good movie”这句话用二元模型就可以被表示为:{this},{this was},{was a},{a good},{good movie}计算“this was a good movie”是一个句子的概率的步骤如下:P=P(this)*P(was|this)*P(a|was)*P(good|a)*P(movie|good)代码如下:import tensorflow as tfimport tensorfl原创 2021-03-04 10:32:02 · 1053 阅读 · 1 评论 -
TensorFlow_datasets缓存
TensorFlow_datasets 在第一次读取在线数据后,会把数据缓存在C:\Users<用户名>\tensorflow_datasets\目录下。下次再调用的时候,会读取本地的数据。这样节省了不少的时间。原创 2021-03-03 08:59:43 · 459 阅读 · 0 评论 -
TensorFlow高阶张量叉乘
设A为[d1,d2,…dn,m,p]的张量,B为[d1,d2,…dn,p,n] 的张量,那么称[d1,d2,…dn,m,n]的张量C为张量A与B的叉乘。举例如下:import tensorflow as tfa=range(72)b=tf.reshape(a,[3,2,3,4])b=tf.cast(b,dtype=tf.float32)c=tf.reshape(b,[3,2,4,3])print(tf.matmul(b,c))print(b@c)...原创 2021-02-27 07:28:07 · 1062 阅读 · 0 评论 -
对Tensorflow 分词器texts_to_matrix的理解
在实现上,这个函数是调用了sequences_to_matrix,为了便于理解使用texts_to_matrix作为分析。毕竟单词比数字更直观。对于下面的单词组:texts=[['hello','world'], ['hello','Jim','hello','Rose'], ['home']]texts是一个二维数组,可以看作是文章的集合。如果我们要得到hello在每篇文章中的出现次数,要怎么处理?显然texts_to_matrix是可以完成这个功能的。但是问题是如何生成参数是个问题。原创 2021-02-09 10:04:20 · 699 阅读 · 0 评论 -
Tensorflow API官网的一个bug
在这里插入图片描述原创 2021-02-06 20:18:10 · 171 阅读 · 0 评论 -
Tensorflow中random_channel_shift实现的问题
在Tensorflow中,有一个处理图像的函数random_channel_shift。其源代码如下:def random_channel_shift(x, intensity_range, channel_axis=0): """Performs a random channel shift. # Arguments x: Input tensor. Must be 3D. intensity_range: Transformation intensity原创 2021-02-06 19:17:48 · 545 阅读 · 0 评论 -
Tensorflow 预处理模块之skipgrams
tf.keras.preprocessing.sequence.skipgrams()是Tensorflow预处理模块的一个函数,其功能是根据输入条件生成词汇对。因为可能是跳n个词生成的词汇对,所以也叫跳字模型。其定义如下:tf.keras.preprocessing.sequence.skipgrams(sequence, vocabulary_size, window_size=4, negative_samples=1., shuffle=True, categorical=Fals原创 2021-02-05 14:36:39 · 931 阅读 · 0 评论 -
tensorflow 自定义metrics
tensoflow的自定义metrics类需要重定义下面3个方法:init初始化类,主要包括注册权重变量,自定义类的名字update_state此方法是关键的一个方法,更新指标就在这个方法中实现result返回结果其他的方法可以直接继承Metric基类,比如reset_state,get_weights等方法。按照上述方法,简化实现了MeanAbsoluteError类:class MyMAE(tf.keras.metrics.Metric): def __init__(sel原创 2021-02-03 17:28:24 · 3414 阅读 · 5 评论 -
Tensorflow keras 优化器
整理了一下Tensorflow keras的优化器:原创 2021-01-27 17:12:02 · 584 阅读 · 2 评论 -
Tensorflow Embedding层
Tensorflow的Embedding层实际功能就是完成从一个数组到另外一个数组的映射。比如数组x=[0,2,1,0,1,0],经过下面的Embedding层后,得到的输出为:import tensorflow as tfx = [0,1,1.2,0.4,1,0,2]model = tf.keras.Sequential()model.add(tf.keras.layers.Embedding(3, 2, input_length=7))#输入维,输出维model.compile('rmspro原创 2021-01-25 17:08:37 · 3990 阅读 · 4 评论 -
tesnforflow之tf.function,fit和使用cpu训练自编码器所需时间
这只是简单的对比,结果如下:方法时间tf.function1.5030秒/次fit1.9616秒/次cpu2.1381次/秒可能不同的配置会有不同的变化,这个只是简单的对比。import osimport numpy as npimport tensorflow as tffrom tensorflow import kerasfrom tensorflow.keras import Sequential, layersimport timetf原创 2021-01-23 09:28:46 · 349 阅读 · 2 评论 -
Tensorflow 神经网络训练加速
如何加快收敛速度?使用GPU越是复杂的网络,GPU的性能提高也明显。使用GPU是最有效的提高收敛速度的方法使用model.fit()使用tensorflow提供的model.fit()训练速度非常快,比自己编写的算法要快10~100倍。凡是能够直接应用的,一定使用tensorflow提供的函数与方法。使用@tf.function如果必须要使用定制化的算法,可以在关键的地方使用@tf.function,大概可以提高1倍的训练速度。@tf.function 一般修饰梯度带所在的函数,也可原创 2021-01-22 17:26:35 · 991 阅读 · 0 评论 -
tensorflow 2.4
最新的tensorflow2.4 需要更新显卡的驱动、cuda工具和cudnn动态库。需要更新三个包。否则gpu无法使用。原创 2021-01-22 13:35:09 · 659 阅读 · 0 评论 -
Tensorflow实现变分自编码器
自编码器一般功能是压缩数据。但是变分自编码器(variational autoencoder,VAE)的主要作用却是可以生成数据。变分自编码器的这种功能可以应用到很多领域,从生成手写文字到合成音乐。变分自编码器的实现在标准自编码器上增加了一个网络层,该网络层有2个子网络组成:均值网络和方差网络。如下图所示:变分自编码器的训练过程与标准自编码器不同。首先是在编码器中引入了2个子网络均值和方差。其次是在编码器和解码器之间加入了一个采样层。采样层的输入为均值、方差以及高斯噪声,算法如下:最后采样层的结果原创 2021-01-21 09:22:00 · 930 阅读 · 3 评论 -
Tensorflow 3种RNN的比较
Tensorflow提供了3种循环神经网络:SimpleRNN、LSTM和GRU。这三种方法,SimpleRNN最简单,LSTM和GRU差不多,但是GRU的训练速度稍微占一些优势,毕竟LSTM有3个门(相当于增加了3次矩阵运算),而GRU只有两个门(相当于增加了2次矩阵运算)。下面程序的训练时间:循环神经网络训练时长准确度SimpleRNN9.2590.958LSTM24.9840.973GRU22.2590.980包含有4个神经元的SimpleRNN原创 2021-01-16 11:21:38 · 805 阅读 · 0 评论 -
Tensorflow SimpleRNNCell的实现研究
本文介绍Tensorflow如何实现的简单循环神经网络。下面代码是SimpleRNNCell的输出计算。可以看出有3个重要的矩阵/向量:self.kernelself.biasself.recurrent_kernelself.kernel是和inputs进行点积的(dot),所得的结果再和self.bias相加(self.bias是偏置项,是个向量)。第二步是self.recurrent_kernel和prev_output进行点积(dot),prev_output是上一次计算的输出。网络上有一原创 2021-01-15 18:08:45 · 724 阅读 · 0 评论 -
TensorFlow 堆叠循环神经网络(深层循环神经网络)
堆叠循环神经网络,又叫深层循环神经网络,就是将多个循环神经网络堆叠起来。在TensorFlow中,提供了tf.keras.layers.StackedRNNCells()类来封装堆叠神经网络的单元。要注意的是,这相当于是神经元,还要通过tf.keras.layers.RNN()封装成一个网络层才能正常使用。下图对堆叠循环神经网络的解释:左侧为堆叠循环神经网络,右侧为展开图。代码如下:import tensorflow as tfmnist = tf.keras.datasets.mnist(x原创 2021-01-15 08:40:02 · 2021 阅读 · 0 评论 -
Tensorflow 2.0 双向循环网络实现mnist手写数字识别
学习双向循环神经网络的时候发现,很多实现是基于1.x版本的。这里面的一个关键是在SimpleRNN和Dense之间要加一层Flatten,否则会报错。循环网络使用的激活函数应该是饱和性的比较好。默认是tanh,使用relu反而效果不佳。import tensorflow as tfmnist = tf.keras.datasets.mnist(x_train, y_train), (x_test, y_test) = mnist.load_data()x_train=x_train/255.x_原创 2021-01-14 21:34:13 · 304 阅读 · 0 评论 -
15种TensorFlow中实现的激活函数的效率
本文通过简单的全连接网络,测试了一下TensorFlow中激活函数的训练时间。使用的数据是mnist,网络结构如下:Model: “sequential”Layer (type) Output Shape Param #flatten (Flatten) (None, 784) 0dense (Dense) (None, 128)原创 2021-01-12 09:58:15 · 509 阅读 · 0 评论 -
Tensorflow keras 激活函数
激活函数的作用激活函数是神经网络的重要组成部分。通过激活函数,可以让神经网络很好的解决非线性问题。在最初的阶段,使用的激活函数是sigmoid函数。但是此激活函数存在严重的梯度消失问题,在近期经常使用的是relu激活函数,而且出现了很多的变种relu函数。本文主要介绍tensorflow中keras部分的激活函数。keras中的激活函数keras中定义了多种的激活函数,几乎涵盖了所有的激活函数:激活函数描述relurelu激活函数(修正线性单元)eluelu激活函数原创 2021-01-05 19:24:44 · 3568 阅读 · 0 评论 -
tensorflow dataset使用
tensorflow 中的dataset是一个基类,可以用来处理数据的输入。数据生成可以用以下方法生成dataset:from_tensor_slices()将输入的张量、元组、字典进行切片处理。切片发生在最外层的维度。比如将(5,2)形状的张量输入,得到的是5个(2)形状的张量:import tensorflow as tfs = tf.constant(range(1,11))s = tf.reshape(s,(5,2))t = tf.data.Dataset.from_tensor原创 2021-01-03 10:57:28 · 1969 阅读 · 0 评论 -
tensorflow.keras.datasets 中关于imdb.load_data的使用说明
在tensorflow2.x的keras中内置了7种类型的数据集:数据集名称数据集描述boston_housing波士顿房价数据cifar1010种类别图片集cifar100100种类别图片集fashion_mnist10种时尚类别图片集imdb电影评论情感分类数据集mnist手写数字图片集reuters路透社新闻主题分类数据集这些数据的读取都可以使用load_data()方法。不过2种关于文本的数据集imdb和reuters比较原创 2021-01-02 09:40:30 · 6235 阅读 · 1 评论 -
自然语言处理 - LSA
LSA (Latent Semantic Analysis)潜在语义分析,是利用线性代数奇异值分解的方法来达到降维的目的。有关奇异值分解,可以去参考线性代数的书籍。使用奇异值如何达到降维?正常的情况下,奇异值的分解并不能降低向量空间的复杂度。比如语料库是1000个单词,200篇文档的情况下,矩阵M的维度是1000x200,该矩阵有20万个元素。通过奇异值分解,可以得到三个矩阵,分别是1000x1000,200,200x200,一共有1,200,200个元素。可以发现经过奇异值分解后的维度增加了,而不是减原创 2020-07-22 11:06:50 · 1274 阅读 · 1 评论 -
自然语言的数据化表示 - Distributed 和 Distributional
在讲述语言的分布式表示之前,先解释一下distributed和distributional。这2个词很相近,估计看了会很混淆。distributed的表示方法集中在降维上。一般是通过单纯的算法减低维度。而distributional则是通过上下文关系达到降维的目的。目前研究的主要方向是distributional方法,也就是通过上下文的方法得到降维的稠密矩阵。鼎鼎大名的word2vec就是用了此种方法。其实没有必要过于纠结这2个名词。弄清楚算法才是根本。...原创 2020-07-22 10:27:49 · 666 阅读 · 0 评论 -
自然语言的数据化表示 -独热编码
机器是无法直接理解语言的。人类的语言必须翻译成机器可以理解的数据。一个简单的表示方法就是独热方法(one-hot)。原创 2020-07-21 15:21:39 · 1614 阅读 · 0 评论 -
NNLM(神经网络语音模型)
NNLM是利用神经网络计算词向量的方法。这个实现方法大部分是基于神经网络语音模型,只有少部分的修改。第一部分代码是定义了Preprocess类,来自哈工大一位老师的代码,我做了微调。第二部分是处理输入的文章,主要是去除不需要的字符。第三部分是建立词的序列第四部分是建立神经网络模型。可以用model.summary()查看第五部分是查看训练的结果。data_generator()函数是生成训练数据的。具体的可以查看fit_generator的说明。需要说明的是,训练速度比较慢。远远落后于Glov原创 2020-06-28 08:37:39 · 751 阅读 · 0 评论 -
对于Glove 算法的理解
Glove算法是一种基于全局词频统计的回归算法。它不是基于神经网络的,而是基于最小二乘原理的回归方法。它的算法的核心就是损失函数:通过这个函数可以计算出词向量。推导的过程不是严格基于数学的。我尝试反向推导一下,看看能否让大家更容易理解。正规的推导除了看原文之外,可以参考NLP学习(1)—Glove模型—词向量模型上面的损失函数是基于i,j统计的,因此可以得出Glove的算法复杂度是N*N。f(xij)是一个权重函数,其目的是防止某些取值过大,而某些取值又过小。词函数的定义如下:第二部分,就是大原创 2020-06-22 10:19:28 · 2500 阅读 · 0 评论 -
用Mittens实现Glove的方法
大致上弄清楚了Glove的算法。此程序可以生成Vector矩阵。我的笔记本支持4860个词汇,维度是100的(用GPU,内存比较小)。注释里面写了算法。主要是数据的预处理:去除空行去除特殊字符(包括标点)去除停用词切分再次去除停用词(因为切分后可能也有停用词产生)生成字典使用滑动窗口,生成共现矩阵使用Mittens生成Glove Vector保存"""本文件包含中文NLP预处理常用的一些代码"""import refrom mittens import GloVeimport原创 2020-06-20 10:08:47 · 920 阅读 · 0 评论 -
斯坦福大学 Glove vector的用法
可以从斯坦福大学的官方网站下载训练好的Glove Vector。网址如下:斯坦福大学Glove网址:https://nlp.stanford.edu/projects/glove/文件很大。最小的也有822M。拿到文件后,不能直接用在gensim中。还需要增加一行。比如glove.6B.50d.txt 就需要增加 “400000 50”。表示有400000个词,维度是50。(有博客说增加400001是错误的。我的程序会报错)可以使用下面的代码修改:out_file=open("g.50.txt",原创 2020-06-20 08:56:38 · 1207 阅读 · 0 评论 -
用Mittens实现Glove算法
用Mittens实现了Glove算法。但是算出了矩阵之后,不知道怎么用。另外,矩阵在误差0.02后,就很难再收敛了。不知道是不是有什么错误。这几天花时间研究一下。Mittens的代码在我前面的博客中有。使用的数据是从搜狐下载的。停用词是网络上找的。如果有需要的可以私信。也希望有大佬可以指点我的算法是否正确,以及如何使用Mittens。代码没有整理,看着有些乱。(有些代码是借用的)"""本文件包含中文NLP预处理常用的一些代码"""import osimport reimport stri原创 2020-06-20 07:46:14 · 556 阅读 · 10 评论 -
共现矩阵之二:共现概率统计
共现概率的统计思路如下:设定窗口大小。这个窗口是共同出现的词。处理输入词。去除stop word,建立索引表,建立词频矩阵,并初始化矩阵依据窗口的大小,处理每一行数据,统计出现的次数,保存在词频矩阵中需要注意的是,要考虑窗口比现有的词汇多的情况。这两天会根据这个思路实现一下。...原创 2020-06-17 08:45:00 · 3544 阅读 · 0 评论 -
将TF1.x 程序移植到TF 2.x
TF2.x 与TF1.x有很大的差别,除了一些函数做了修改之外,最大的变化就是使用了急切执行。Session已经不再使用了。虽然可以使用import tensorflow.compat.v1 as tf来继续使用Session,但是这与谷歌发布TF2.x的概念是不符的。TF1.x的程序还是要改写后升级到TF 2.x。本文就是通过改写一个TF1.x的程序,简单介绍一下如何移植TF1.x代码到TF2.x第一步当然是直接import tensorflow as tf第二步是去除Session相原创 2020-06-12 17:17:17 · 1143 阅读 · 0 评论 -
用Tensorflow 2.0改写tf-mittens
在github中,有GloVe的python实现。该方法使用了numpy和tensorflow两种模式。不过tensorflow是用session的方法,此方法在2.0中已经不再使用了。我把tf-mittens.py进行了改写。里面有注释,大家可以参考。mittens的代码网址:https://github.com/roamanalytics/mittens"""tf_mittens.pyFast implementations of Mittens and GloVe in Tensorflow原创 2020-06-12 15:42:55 · 243 阅读 · 0 评论 -
LSTM算法介绍
。LSTM(Long Short Term Memory),又称为长短时记忆,其核心思想就是在普通的RNN单元中增加了门的概念来控制RNN单元。门可以决定信息通过多少,通过门可以更精准的控制RNN单元的行为。在LSTM中,有三种类型的门:遗忘门、输入门和输出门。LSTM的算法与这3种门有很大的关系。LSTM首先扩展了普通的RNN单元。普通的RNN单元只有可以视为短暂记忆的单元h,而LSTM增加了存储过去信息的记忆单元C。上面提到的3个门就是用来处理记忆单元C的。(1)遗忘门的作用是处理上一状态中的信息原创 2020-06-11 11:22:38 · 4828 阅读 · 0 评论 -
LSTM介绍
LSTM是RNN的一种。它的出现解决了梯度失真的问题。而且使得RNN的收敛速度比普通的RNN要快上不少。LSTM的名称有些奇特,叫长短时记忆。这个实际反应了这个算法的原理:保持记忆的长短。我们的大脑并不是记忆所有的信息,有短时记忆,也有长时间记忆。LSTM就是利用这个原理来设计的。普通的RNN只是保持了短时的记忆(h),在LSTM中增加了对记忆的处理©。这个增加的部分控制的逻辑比较复杂。简单的来说就是通过3个门:遗忘门、输入门和输出门来控制增加的记忆单元。需要注意的是,增加的门都是用来控制记忆单元的。原创 2020-06-10 08:17:55 · 991 阅读 · 0 评论 -
深度循环神经网络的实现
用Tensorflow可以很方便的实现深度循环神经网络。不过训练速度慢、效果差。可能是我没有研究明白深度循环神经网络的正确用法。用LSTM和GRU已经足够了。深度循环神经网络的算法,还是有待提高的。import tensorflow as tffrom tensorflow import kerasimport numpy as npmax_features=89000maxlen = 450batch_size=64cell_size=8n_layers = 3def my_loa原创 2020-06-09 08:19:53 · 269 阅读 · 0 评论 -
使用Tensorflow keras创建GRU
创建GRU也有两种方法:GRU和RNN+GRUCellGRUimport tensorflow as tfimport numpy as npfrom tensorflow import kerasimport osimport matplotlib.pyplot as pltos.environ['TF_CPP_MIN_LOG_LEVEL'] = '1'#读取本地mnist数据def my_load_data(path='mnist.npz'): origin_folder原创 2020-06-06 08:44:03 · 2891 阅读 · 0 评论 -
使用Tensorflow keras 创建LSTM
本文介绍使用LSTM和 RNN+LSTMCell 等2种方法实现LSTM网络。SimpleRNN的全连接循环神经网络收敛速度是比较慢,而LSTM就快多了。LSTM代码如下:import tensorflow as tfimport numpy as npfrom tensorflow import kerasimport osimport matplotlib.pyplot as pltos.environ['TF_CPP_MIN_LOG_LEVEL'] = '1'#读取本地mnis原创 2020-06-06 08:36:22 · 2391 阅读 · 0 评论