import keras_metrics as km
from keras.preprocessing import sequence
from keras.models import Sequential
from keras.layers import Dense,Embedding
from keras.layers import LSTM


#初始化
model=Sequential()
#嵌入层,将正整数(下标)转换为具有固定大小的向量,如[[4],[20]]->[[0.25,0.1],[0.6,-0.2]]
model.add(Embedding(output_dim,input_dim))
#循环层
model.add(LSTM(256))
#防止过拟合
model.add(Dropout(0.5))
#全连接层和激活层
model.add(Dense(1,activation="sigmoid"))
#训练模式
model.compile(loss="binary_crossentropy",optimizer="adam",metrics=["accuracy",km.binary_precision(),km.binary_recall()])
#模型概括打印
model.summary()
x_train,x_test,y_train,y_test = train_test_split(X,Y,test_size=0.3,random_state=0,stratiry=Y)
#模型训练参数设置和训练
model.fit(x_train,y_train,epochs=60,batch_size=512,shuffle=True,clss_weight=None,validation_data(x_test,y_test))
#模型评估
loss,acc,pre,recall=model.evaluate(x_test,y_test,batch_size=512)
#模型预测
model.predict()

#嵌入层,将正整数(下标)转换为具有固定大小的向量,如[[4],[20]]->[[0.25,0.1],[0.6,-0.2]],该层只能用作模型中的第一层

model.add(Embedding(output_dim,input_dim,mask_zero,weights,input_length))

output_dim=word2vec的size,词向量的维度
input_dim,数据的维度(数据的范围)

通俗来说,input_length就是输入数据的长度,Input_dim就是数据的维度。比如一条数据内容是: “人人车” , one hot编码后是 [[1 0] [1 0] [0 1]]表示 ,

input_dim, input_length = input_shape(input_length, input_dim)
上述的数据的张量为input_shape(3,2)
则 input_length = 3, input_dim = 2. (因为词汇表大小为0或1,最大整数1+1=2)

input_dim: int > 0。词汇表大小, 即,最大整数 index + 1。
output_dim: int >= 0。词向量的维度。

mask_zero: 是否把 0 看作为一个应该被遮蔽的特殊的 “padding” 值。 这对于可变长的 循环神经网络层 十分有用。 如果设定为 True,那么接下来的所有层都必须支持 masking,否则就会抛出异常。 如果 mask_zero 为 True,作为结果,索引 0 就不能被用于词汇表中 (input_dim 应该与 vocabulary + 1 大小相同)。

input_length: 输入序列的长度,当它是固定的时。 如果你需要连接 Flatten 和 Dense 层,则这个参数是必须的 (没有它,dense 层的输出尺寸就无法计算)。

输入尺寸
尺寸为 (batch_size, sequence_length) 的 2D 张量。

输出尺寸
尺寸为 (batch_size, sequence_length, output_dim) 的 3D 张量。

model = Sequential()
model.add(Embedding(1000, 64, input_length=10))
# 模型将输入一个大小为 (batch, input_length) 的整数矩阵。
# 输入中最大的整数(即词索引)不应该大于 999 (词汇表大小)
# 现在 model.output_shape == (None, 10, 64),其中 None 是 batch 的维度。

input_array = np.random.randint(1000, size=(32, 10))

model.compile('rmsprop', 'mse')
output_array = model.predict(input_array)

参考资料:

python Keras库官网网站 python keras教程_深度学习

model.compile(loss=“binary_crossentropy”,optimizer=“adam”,metrics=[“accuracy”,km.binary_precision(),km.binary_recall()])

loss:损失函数

binary_crossentropy

即对数损失函数,log loss,与sigmoid相对应的损失函数。
categorical_crossentropy

多分类的对数损失函数,与softmax分类器相对应的损失函数

参考资料

optimizer:优化器
metrices:评判标准

from tensorflow.keras import optimizers
dir(optimizers)
#输出
'Adadelta',
 'Adagrad',
 'Adam',
 'Adamax',
 'Ftrl',
 'Nadam',
 'Optimizer',
 'RMSprop',
 'SGD',
 '__builtins__',
 '__cached__',
 '__doc__',
 '__file__',
 '__loader__',
 '__name__',
 '__package__',
 '__path__',
 '__spec__',
 '_sys',
 'deserialize',
 'get',
 'schedules',
 'serialize']

优化器:

Adadelta;
Adagrad;
Adam;
Adamax;
Nadam;
RMSprop;
SGD

参考资料:

Sequential,建立模型;Embedding,嵌入层,词向量化;LSTM,循环层;Dropout,融合层,减少张量的维度,防止过拟合;Dense,全连接层,分类,将低维张量作为输入,然后输出一个0到1之间的数值;summary(),输出模型各层的参数状况;Compile,loss,多分类和二分类,optimizer,优化器;Fit,模型训练参数设置和训练;Evaluate,模型评估;Redict,模型预测。

二分类: 损害函数:binary_crossentropy,优化器:sigmoid
多分类: 损失函数: categorical_crossentropy,优化器:softmax