keras——layers篇:Dense, Embedding, LSTM

rom keras.models import Sequential
from keras.layers import Dense, Embedding, LSTM
embed_dim = 128
lstm_out = 196
batch_size = 32
model = Sequential()
model.add(Embedding(2000, embed_dim,input_length = X.shape[1], dropout = 0.2))
model.add(LSTM(lstm_out, dropout_U = 0.2, dropout_W = 0.2))
model.add(Dense(2,activation='softmax'))
model.compile(loss = 'categorical_crossentropy', optimizer='adam',metrics = ['accuracy'])
print(model.summary())

在这里插入图片描述
学习本文之前,先看上面几行代码。如果你对上面代码了如指掌,那么无需查看本文了~

1.简介keras

本部分参考:https://www.cnblogs.com/LittleHann/p/6442161.html
Keras是一个高层神经网络库,Keras由纯Python编写而成并基Tensorflow或Theano.
Keras的核心数据结构是“模型”,模型是一种组织网络层的方式。Keras中主要的模型是Sequential模型,Sequential是一系列网络层按顺序构成的栈

from keras.models import Sequential
model = Sequential()
将一些网络层通过.add()堆叠起来,就构成了一个模型:
from keras.layers import Dense, Activation
model.add(Dense(output_dim=64, input_dim=100))
model.add(Activation("relu"))
model.add(Dense(output_dim=10))
model.add(Activation("softmax"))

完成模型的搭建后,我们需要使用.compile()方法来编译模型:

model.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy'])

编译模型时必须指明损失函数和优化器,如果你需要的话,也可以自己定制损失函数。Keras的一个核心理念就是简明易用同时,保证用户对Keras的绝对控制力度,用户可以根据自己的需要定制自己的模型、网络层,甚至修改源代码

from keras.optimizers import SGD
model.compile(loss='categorical_crossentropy', optimizer=SGD(lr=0.01, momentum=0.9, nesterov=True))

完成模型编译后,我们在训练数据上按batch进行一定次数的迭代训练,以拟合网络

model.fit(X_train, Y_train, nb_epoch=5, batch_size=32)
随后,我们可以使用一行代码对我们的模型进行评估,看看模型的指标是否满足我们的要求
loss_and_metrics = model.evaluate(X_test, Y_test, batch_size=32)
或者,我们可以使用我们的模型,对新的数据进行预测
classes = model.predict_classes(X_test, batch_size=32)
proba = model.predict_proba(X_test, batch_size=32)

2.关于Dense

keras.layers.Dense(512, activation= 'sigmoid', input_dim= 2, use_bias= True)

这里定义了一个有512个节点,使用sigmoid激活函数的神经层,注意定义第一层的时候需要制定数据输入的形状,即input_dim,这样才能让数据正常喂进网络!

3.关于Embedding

单词嵌入提供了单词的密集表示及其相对含义,***

它们是对简单包模型表示中使用的稀疏表示的改进

参考:https://juejin.im/entry/5acc23f26fb9a028d1416bb3
***,可以从文本数据中学习字嵌入,并在项目之间重复使用。它们也可以作为拟合文本数据的神经网络的一部分来学习。

Embedding层只能作为模型的第一层

单词嵌入是使用密集的矢量表示来表示单词和文档的一类方法。

词嵌入是对传统的词袋模型编码方案的改进,传统方法使用大而稀疏的矢量来表示每个单词或者在矢量内对每个单词进行评分以表示整个词汇表,这些表示是稀疏的,因为每个词汇的表示是巨大的,给定的词或文档主要由零值组成的大向量表示。

相反,在嵌入中,单词由密集向量表示,其中向量表示将单词投影到连续向量空间中。
向量空间中的单词的位置是从文本中学习的,并且基于在使用单词时围绕单词的单词。

学习到的向量空间中的单词的位置被称为它的嵌入:Embedding。

从文本学习单词嵌入方法的两个流行例子包括:
Word2Vec.
GloVe.
除了这些精心设计的方法之外,还可以将词嵌入学习作为深度学习模型的一部分。这可能是一个较慢的方法,但可以通过这样为特定数据集定制模型。

4.Flatten

from:https://blog.csdn.net/program_developer/article/details/80853425
Flatten层的实现在Keras.layers.core.Flatten()类中。
作用:

Flatten层用来将输入“压平”,即把多维的输入一维化,常用在从卷积层到全连接层的过渡。Flatten不影响batch的大小。

from keras.models import Sequential
from keras.layers.core import Flatten
from keras.layers.convolutional import Convolution2D
from keras.utils.vis_utils import plot_model
 
 
model = Sequential()
model.add(Convolution2D(64,3,3,border_mode="same",input_shape=(3,32,32)))
# now:model.output_shape==(None,64,32,32)
 
model.add(Flatten())
# now: model.output_shape==(None,65536)
 
plot_model(model, to_file='Flatten.png', show_shapes=True)

在这里插入图片描述

  • 23
    点赞
  • 133
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值