多层神经网络及TensorFlow使用

摘要:
#模型的输出结果。compileprintp=模型。预测#p如下:[[[-0.04306092-0.03373697][-0.04306092-0.0337373697][-0.03351045-0.03122779][0.07884620.0147854][0.01061829-0.00132079][0.001061829-0.0012079][0.00161829-0.010132079][0.01061829-0.0013 2079][00.01061829-0.00132079][0.01061828-0.00132079][0.0106182E-00132079][3.01061829=0.00132079]]III Keras建模和应用构建多层神经网络模型输入层:7个神经元+一个偏移项隐藏层1:64个神经元隐藏层2:32个神经元输出层:1个神经元1.建模情感评论模型构造代码:importtensorflowstfmodel=tf。keras。模型。Sequential()#序列化模型。添加模型。add#类似的池模型。add#全连接隐藏层模型。add#放弃图层模型。add#输出层模型Compile#loss是loss函数,选择binary进行二进制分类_ Crossentopy,选择category进行多个分类_ crossentropyprinthistory=model。fit#batch_Size一次将128个数据放入#x中_Train:训练数据集,y_Train是一个标签数据集,用ont点编码。
一、文本的预处理---文本转数字列表

TensorFlow的Keras库有文本预处理功能。Tokenizer是一个用于向量化文本,或将文本转换为序列(即单词在字典中的下标构成的列表,从1算起)的类。如下面示例的:

  • ['ha ha gua angry','howa ha gua excited naive'],按照每个词的位置重新编号为
  • [[1, 1, 2, 3], [4, 1, 2, 5, 6]] 表示每个词在文本的索引位置。每个词只有一个索引。

实验代码如下:

import tensorflow as tf
somestr = ['ha ha gua angry','howa ha gua excited naive']
tok = tf.keras.preprocessing.text.Tokenizer(num_words=20)
tok.fit_on_texts(somestr)  #装入文档,转数字列表

train_sequences=tok.texts_to_sequences(somestr)
print(train_sequences)
x_train=tf.keras.preprocessing.sequence.pad_sequences(train_sequences,   #补齐,每行字符串用10列表示,不够补0
                                                      padding="post",
                                                      truncating="post",
                                                      maxlen=10)
#x_train输出结果为:
[[1 1 2 3 0 0 0 0 0 0]
 [4 1 2 5 6 0 0 0 0 0]]
二、词嵌入层设计--数字序列转成词向量表示

文档转数字表示后,还是不便于表示词的特征。需要对数字再次编码。如以下某个文本的数字列表如下:

我  从  哪  里  来  要  到  何  处  去
0    1    2    3   4    5   6    7    8   9`

1.One-Hot 编码

one-hot编码,one-hot编码的优势就体现出来了,计算方便快捷、表达能力强。稀疏矩阵做矩阵计算的时候,只需要把1对应位置的数相乘求和就行。

# 我从哪里来,要到何处去
[
[1 0 0 0 0 0 0 0 0 0]
[0 1 0 0 0 0 0 0 0 0]
[0 0 1 0 0 0 0 0 0 0]
[0 0 0 1 0 0 0 0 0 0]
[0 0 0 0 1 0 0 0 0 0]
[0 0 0 0 0 1 0 0 0 0]
[0 0 0 0 0 0 1 0 0 0]
[0 0 0 0 0 0 0 1 0 0]
[0 0 0 0 0 0 0 0 1 0]
[0 0 0 0 0 0 0 0 0 1]
]

最明显的缺点。过于稀疏时,过度占用资源。比如:中文大大小小简体繁体常用不常用有十几万,然后一篇文章100W字,你要表示成100W X 10W的矩阵?这时,Embedding层横空出世。Embedding降维度功能

所以,embedding层做了个什么呢?它把我们的稀疏矩阵,通过一些线性变换(在CNN中用全连接层进行转换,也称为查表操作),变成了一个密集矩阵,这个密集矩阵用了N(例子中N=3)个特征来表征所有的文字,在这个密集矩阵中,表象上代表着密集矩阵跟单个字的一一对应关系,实际上还蕴含了大量的字与字之间,词与词之间甚至句子与句子之间的内在关系(如:我们得出的王妃跟公主的关系)。他们之间的关系,用的是嵌入层学习来的参数进行表征。从稀疏矩阵到密集矩阵的过程,叫做embedding,很多人也把它叫做查表,因为他们之间也是一个一一映射的关系。embedding后的词向量表示如下:

公 [ 0.5 0.125 0.5]
主 [ 0.5 0.125 0.5]
王 [ 0.3 0.375 0.5]
妃 [ 0.3 0.375 0.5]

更重要的是,这种关系在反向传播的过程中,是一直在更新的,因此能在多次epoch后,使得这个关系变成相对成熟,即:正确的表达整个语义以及各个语句之间的关系。这个成熟的关系,就是embedding层的所有权重参数。

2.embedding 嵌入层代码调试

model = keras.models.Sequential()
model.add(keras.layers.Embedding(input_dim=10, output_dim=2, input_length=10)) 
#input_dim:字典长度,即输入数据最大下标+1 ,有多少个文本。output_dim:大于0的整数,代表全连接嵌入的维度,nput_length:当输入序列的长度固定时,该值为其长度。
#该层输入数据个数:10,每个数据词向量维度为2,数据有10个。
#输入形如(samples,sequence_length)的2D张量。这里是个二维数据,一维数组务必再加一层[],改二维。
#输出形如(samples, sequence_length, output_dim)的3D张量,(1,(10,2))

model.compile('rmsprop', 'mse')
print(model.summary())
p=model.predict([[1, 1, 2, 3,0,0,0,0,0,0]])

#p的输出结果如下:
[[[-0.04306092 -0.03373697]
  [-0.04306092 -0.03373697]
  [-0.03351045 -0.03122779]
  [ 0.01788462  0.0147854 ]
  [ 0.01061829 -0.00132079]
  [ 0.01061829 -0.00132079]
  [ 0.01061829 -0.00132079]
  [ 0.01061829 -0.00132079]
  [ 0.01061829 -0.00132079]
  [ 0.01061829 -0.00132079]]]

三、keras建模与应用 建多层神经网路模型
  • 输入层:7个神经元+一个偏置项
  • 隐藏层1:64个神经元
  • 隐藏层2:32个神经元
  • 输出层:1个神经元

多层神经网络及TensorFlow使用第1张

1. 模型搭建

情感评论模型构建的代码:

import tensorflow as tf
model=tf.keras.models.Sequential() #序列化
model.add(tf.keras.layers.Embedding(output_dim=32,   #词向量输出为32维度的0,1编码
                                    input_dim=4000,
                                    input_length=400))
model.add(tf.keras.layers.Flatten())  #类似池化

model.add(tf.keras.layers.Dense(units=256,activation="relu")) #全连接隐藏层

model.add(tf.keras.layers.Dropout(0.3)) #丢弃层

model.add(tf.keras.layers.Dense(units=2,activation='sigmoid'))#输出层

model.compile(optimizer='adam',loss="binary_crossentropy",
              metrics=['accuracy'])  #loss为损失函数,二分类选择binary_crossentropy,多分类选择categorical_crossentropy
print(model.summary())
history=model.fit(x_train,y_train,validation_split=0.2,
                  epochs=10,batch_size=128,verbose=1)  #batch_size一次带128个数据进去
#x_train:训练数据集,y_train为标签数据集,用ont-hot编码。若[1,0]表示正向,[0,1】表示负向。
#多分类的one-hot编码[1,0,0,0]

model.save("d:/film.h5")  #模型保存

2.模型可视化

静待

3.模型评估

test_loss,test_acc=model.evaluate(x_test,y_test,verbose=1) #verbose为1,可以看到每轮训练结果
print("test accuracy:",test_acc)

4.模型预测

predictions=model.predict(x_test)
print(predictions[0])
结果如下:
[9.9994373e-01 5.6257828e-05],表示正向。

参考资料

1)TensorFlow中关于Embedding层的介绍

免责声明:文章转载自《多层神经网络及TensorFlow使用》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇15、mybatis学习——鉴别器discriminator的使用吉利中国年现金红包领取教程下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Keras GlobalAveragePooling2D 示例代码

GlobalAveragePooling2D层 keras.layers.pooling.GlobalAveragePooling2D(dim_ordering=‘default‘) 为空域信号施加全局平均值池化 参数 data_format:字符串,“channels_first”或“channels_last”之一,代表图像的通道维的位置。该参数是Ke...

1 如何使用pb文件保存和恢复模型进行迁移学习(学习Tensorflow 实战google深度学习框架)

学习过程是Tensorflow 实战google深度学习框架一书的第六章的迁移学习环节。 具体见我提出的问题:https://www.tensorflowers.cn/t/5314 参考https://blog.csdn.net/zhuiqiuk/article/details/53376283后,对代码进行了修改。 问题的跟踪情况记录: 1 首先是保存模...

Tensorflow模型加载与保存、Tensorboard简单使用

先上代码: from __future__ importabsolute_import from __future__ importdivision from __future__ importprint_function #-*- coding: utf-8 -*- """Created on Tue Nov 14 20:34:00 2017 @aut...

Keras 之 多层感知机(MLP)

这里以 mnist 数据集为例,代码如下: import tensorflow as tf from tensorflow.keras import datasets, layers, optimizers, Sequential, metrics # 设置GPU使用方式 # 获取GPU列表 gpus = tf.config.experiment...

零基础入门深度学习(5)

无论即将到来的是大数据时代还是人工智能时代,亦或是传统行业使用人工智能在云上处理大数据的时代,作为一个有理想有追求的程序员,不懂深度学习(Deep Learning)这个超热的技术,会不会感觉马上就out了?现在救命稻草来了,《零基础入门深度学习》系列文章旨在讲帮助爱编程的你从零基础达到入门级水平。零基础意味着你不需要太多的数学知识,只要会写程序就行了,...

VGG16迁移学习实现

VGG16迁移学习实现 本文讨论迁移学习,它是一个非常强大的深度学习技术,在不同领域有很多应用。动机很简单,可以打个比方来解释。假设想学习一种新的语言,比如西班牙语,那么从已经掌握的另一种语言(比如英语)学起,可能是有用的。 按照这种思路,计算机视觉研究人员通常使用预训练 CNN 来生成新任务的表示,其中数据集可能不够大,无法从头开始训练整个 CNN。另一...