全文引用:
卷积神经网络之Keras深度学习
卷积神经网络之优缺点
优点
• 共享卷积核,对高维数据处理无压力
• 无需手动选取特征,训练好权重,即得特征分类效果好
缺点
• 需要调参,需要大样本量,训练最好要GPU
• 物理含义不明确(也就说,我们并不知道没个卷积层到底提取到的是什么特征,而且神经网络本身就是一种难以解释的“黑箱模型”)
卷积神经网络的常用框架
Caffe
• 源于Berkeley的主流CV工具包,支持 C++,python,matlab
• Model Zoo中有大量预训练好的模型供使用
Torch
• Facebook用的卷积神经网络工具包
• 通过时域卷积的本地接口,使用非常直观
• 定义新网络层简单
TensorFlow
• Google的深度学习框架
• TensorBoard可视化很方便
• 数据和模型并行化好,速度快
keras的模型结构:
Keras实现卷积神经网络:
from keras.layers import Conv2D, MaxPooling2D
from tensorflow.examples.tutorials.mnist import input_data
from keras.layers import Dense,Dropout
from keras.models import Sequential
from keras.optimizers import Adam,SGD
from keras.utils import plot_model
# MNIST数据存放的路径
file = "MNIST"
# 导入数据
mnist = input_data.read_data_sets(file, one_hot=True)
X_train = mnist.train.images
y_train = mnist.train.labels
X_test = mnist.test.images
y_test = mnist.test.labels
#定义模型网络结构
model = Sequential()
model.add(Dense(units=256,input_dim=784,activation='relu'))
model.add(Dropout(0.5)) #防止过拟合
model.add(Dense(units=128,activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(units=10,activation='softmax'))
adam = Adam(lr=0.001) #使用Adam优化器
model.compile(optimizer=adam,loss="categorical_crossentropy",metrics=['accuracy'])
model.summary() #输出网络结构
plot_model(model,to_file="mnist_model.png",show_shapes=True) #保存网络结构到图片文件
model.fit(X_train,y_train,batch_size=50,epochs=50) #训练网络
loss,accuracy = model.evaluate(X_test,y_test) #使用测试集评估效果
print(loss,accuracy)
卷积神经网络结构图: