Keras入门必读教程:手把手从安装到解决实际问题( 二 )


importnumpyasnpfromtensorflow.keras.modelsimportSequentialfromtensorflow.keras.layersimportDensedata=https://pcff.toutiao.jxnews.com.cn/p/20210923/np.random.random((1000,100))labels=np.random.randint(2,size=(1000,1))model=Sequential()model.add(Dense(32,activation='relu',input_dim=100))model.add(Dense(1,activation='sigmoid'))model.compile(optimizer='rmsprop',loss='binary_crossentropy',metrics=['accuracy'])model.fit(data,labels,epochs=10,batch_size=32)predictions=model.predict(data)下面我们根据Keras官网的示例来尝试搭建一个类似VGG网络的卷积神经网络模型 。 首先引入需要使用的模块 , 其中包括Keras库中的全连接层、卷积层等 。
importnumpyasnpfromtensorflowimportkerasfromtensorflow.keras.modelsimportSequentialfromtensorflow.keras.layersimportDense,Dropout,Flattenfromtensorflow.keras.layersimportConv2D,MaxPooling2Dfromtensorflow.keras.optimizersimportSGD为了实现模型 , 我们需要先准备一些训练和测试数据 , 这里使用随机方法进行数据的准备 。
x_train=np.random.random((100,100,100,3))y_train=keras.utils.to_categorical(np.random.randint(10,size=(100,1)),num_classes=10)x_test=np.random.random((20,100,100,3))y_test=keras.utils.to_categorical(np.random.randint(10,size=(20,1)),num_classes=10)整体上可以按照VGG的结构来搭建整个网络 , 包括叠加卷积层、池化层、Dropout层、MaxPooling层、全连接网络层等 。
model=Sequential()model.add(Conv2D(32,(3,3),activation='relu',input_shape=(100,100,3)))model.add(Conv2D(32,(3,3),activation='relu'))model.add(MaxPooling2D(pool_size=(2,2)))model.add(Dropout(0.25))model.add(Conv2D(64,(3,3),activation='relu'))model.add(Conv2D(64,(3,3),activation='relu'))model.add(MaxPooling2D(pool_size=(2,2)))model.add(Dropout(0.25))model.add(Flatten())model.add(Dense(256,activation='relu'))model.add(Dropout(0.5))model.add(Dense(10,activation='softmax'))最后我们进行模型的优化设置以及对模型进行编译 , 并可以在训练数据上进行学习 。
sgd=SGD(lr=0.01,decay=1e-6,momentum=0.9,nesterov=True)model.compile(loss='categorical_crossentropy',optimizer=sgd)model.fit(x_train,y_train,batch_size=32,epochs=10)score=model.evaluate(x_test,y_test,batch_size=32)同样地 , 我们也可以使用Keras的序列模型实现基于LSTM的循环神经网络模型 。
fromtensorflow.keras.modelsimportSequentialfromtensorflow.keras.layersimportDense,Embedding,LSTMmodel=Sequential()model.add(Embedding(20000,128))model.add(LSTM(128,dropout=0.2,recurrent_dropout=0.2))model.add(Dense(1,activation='sigmoid'))下面则是对于该循环神经网络模型的编译与训练 , 同时最终评估了训练模型的效果 。
model.compile(loss='binary_crossentropy',optimizer='adam',metrics=['accuracy'])model.fit(x_train,y_train,batch_size=32,epochs=15,verbose=1,validation_data=https://pcff.toutiao.jxnews.com.cn/p/20210923/(x_test,y_test))score=model.evaluate(x_test,y_test,batch_size=32)最终我们可以将模型保存到本地的model文件夹路径下 。
model.save('./model')当在业务中需要使用对应模型时 , 只需要使用加载模型的方法从model路径中进行模型的加载即可 。
fromtensorflow.keras.modelsimportload_modelmy_model=load_model('./model')通过这几个示例我们会发现 , 使用Keras来实现那些复杂的深度学习网络像是搭建积木一样 , 把一些非常复杂的工作简单化了 。 在下一节中 , 会通过一个简明的案例带领大家了解如何使用Keras解决实际的应用问题 。
03Keras实例:文本情感分析
本小节中我们通过学习Keras官方的一个实例来熟悉一下Keras的使用方法 。
参考链接:
https://github.com/keras-team/keras/blob/master/examples/IMDB_lstm.py
情感分析是自然语言处理领域的研究热点 , 也是一项非常实用的技术 , 可以利用这项技术来分析用户在互联网上的观点和态度 , 同时也可以分析企业或商品在互联网上的口碑 。
在深度学习中 , 循环神经网络(RNN)是处理像文本这样的序列模型的最好方式 , 但传统的RNN存在的问题是 , 当序列变长后 , RNN无法记住之前的重要信息 , 并且会存在梯度消失的问题 。 为了解决上述问题 , 研究者提出了一种长短期记忆网络(LSTM) , 这也是目前业内处理文本序列非常流行的一种模型(见图2-14) 。