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())
学习本文之前,先看上面几行代码。如果你对上面代码了如指掌,那么无需查看本文了~
本部分参考: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)
keras.layers.Dense(512, activation= 'sigmoid', input_dim= 2, use_bias= True)
这里定义了一个有512个节点,使用sigmoid激活函数的神经层,注意定义第一层的时候需要制定数据输入的形状,即input_dim,这样才能让数据正常喂进网络!
单词嵌入提供了单词的密集表示及其相对含义,***
参考:https://juejin.im/entry/5acc23f26fb9a028d1416bb3
***,可以从文本数据中学习字嵌入,并在项目之间重复使用。它们也可以作为拟合文本数据的神经网络的一部分来学习。
Embedding层只能作为模型的第一层
单词嵌入是使用密集的矢量表示来表示单词和文档的一类方法。
词嵌入是对传统的词袋模型编码方案的改进,传统方法使用大而稀疏的矢量来表示每个单词或者在矢量内对每个单词进行评分以表示整个词汇表,这些表示是稀疏的,因为每个词汇的表示是巨大的,给定的词或文档主要由零值组成的大向量表示。
相反,在嵌入中,单词由密集向量表示,其中向量表示将单词投影到连续向量空间中。
向量空间中的单词的位置是从文本中学习的,并且基于在使用单词时围绕单词的单词。
学习到的向量空间中的单词的位置被称为它的嵌入:Embedding。
从文本学习单词嵌入方法的两个流行例子包括:
Word2Vec.
GloVe.
除了这些精心设计的方法之外,还可以将词嵌入学习作为深度学习模型的一部分。这可能是一个较慢的方法,但可以通过这样为特定数据集定制模型。
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)