Keras和TensorFlow
keras是一个用Python写的深度学习API,它运行在机器学习平台TensorFlow上。换句话说,Keras是接口(Interface),TensorFlow是平台(Platform)。
使用keras,需要导入一些基本的包:
import numpy as np
import tensorflow as tf
from tensorflow import keras
# TensorFlow2.0以后采用tensorflow.keras
from tensorflow.keras import layers
Keras的核心数据结构是layers(层)和models(模型)。
最简单的model是Sequential model(顺序模型),Sequential是layers的线性堆叠。构建一个Sequential model:
from tensorflow.keras.models import Sequential
model = Sequential()
使用.add()来向model中堆叠layers,keras的layers有(常用):核心层Core layers, 卷积层Convolution layers, 池化层Pooling layers, 正则化层Regularization layers, 激活层Activation layers等等。
from tensorflow.keras.layers import Dense
# keras的core layers包括Dense layer, Activation layer, Embedding layer, Masking layer, Lambda layer
# 这里用Dense layer
model.add(Dense(units=64, activation='relu'))
model.add(Dense(units=10, activation='softmax'))
设置好model后,就可以使用.compile()来配置学习过程:
model.compile(loss='categorical_crossentropy', optimizer='sgd', metrics='accuracy'])
使用.fit()来分批迭代训练数据:
# x_train and y_train are Numpy arrays --just like in the Scikit-Learn API.
model.fit(x_train, y_train, epochs=5, batch_size=32)
使用.evaluate()来评估测试loss和metrics:
loss_and_metrics = model.evaluate(x_test, y_test, batch_size=128)
使用.predict()来预测新的结果
classes = model.predict(x_test, batch_size=128)
构建好的model可以使用.summary()来查看其层次结构
'''
model.summary() #之前必须要执行.build或者.fit,因为不交代input无法显示模型的层次结构
model.build((None,28, 28))
model.fit(x_train, y_train, epochs=5, batch_size=32)
'''
model.summary()
上述model执行.summary完毕后的效果如下图:
也可以将model的层次结构导出为图片:
keras.utils.plot_model(model, "my_first_model.png")
# show_shapes=True表示显示input和output大小
keras.utils.plot_model(model, "my_first_model_with_shape_info.png", show_shapes=True)
show_shapes=True
总结
我也是初学者,我自己也创造不出来一个CNN或者其他复杂的model,最常用的做法是根据现有的别人已经训练好的模型,再修改为适合自己的模型就足够了。
如何做到修改为适合自己的模型,这就需要判断自己的model需要哪些layer,input和output数据大小是多少,迭代次数等等。
我之前跑过一个手势识别的代码,其模型的建立只有几行代码,而大量的步骤是数据的预处理,所以如何对数据进行预处理才是深度学习的难点。
效果如下:
一起学深度学习,微信公众号会记录我学习keras的过程,不只是学习笔记,还会写一些自己当程序员的感悟和分享。