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)
参考资料:
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