一 什么是Keras
Keras是一个由Python编写的开源人工神经网络库,可以作Tensorflow、Microsoft-CNTK和Theano的高阶应用程序接口,进行深度学习模型的设计、调试、评估、应用和可视化。
Keras相当于比Tensorflow和Theano更高一层的库,其可以以Tensorflow或者Theano为底层框架,以更加简洁、高效的方式添加代码。
二 keras中的函数
1 .tf.keras读取图片,修改大小和输入tensorflow
# tf.keras读取图片和改变图片大小
from tensorflow.python.keras.preprocessing.image import load_img
def main():
image= load_img("./picture/微信截图_20220302145534.png/",target_size=(300,300))
print(image)
if __name__ == '__main__':
main()
其中,load_img("地址“,target_size=改变后图片的大小)
输出为<PIL.Image.Image image mode=RGB size=300x300 at 0x1BA401B8358>
由于读取出来的类型不能直接在Tensorflow中使用,所以需要进行类型转换
# tf.keras读取图片和改变图片大小
from tensorflow.python.keras.preprocessing.image import load_img,img_to_array
def main():
image= load_img("./picture/微信截图_20220302145534.png/",target_size=(300,300))
print(image)
# 由于读取出来的类型不能直接在Tensorflow中使用,所以需要进行类型转换
image=img_to_array(image)
print(image.shape)
print(image)
if __name__ == '__main__':
main()
其中 img_to_array(img,data_format=None,dtype=None)
img:代表待处理的图片位置
data_format :Image data format,either "channels_first" or "channel_last"
有两种格式:NHCW,排列顺序为(batch,height,weidth,channels) (张数,竖直,水平,通道),tensorflow默认
NCHW,排列顺序为(batch,channels,height,weidth,) (张树,通道,数值,水平)
dtype=None:不清楚
输出结果为:
<PIL.Image.Image image mode=RGB size=300x300 at 0x2B65AD88860>
(300, 300, 3)
[[[122. 110. 156.]
[118. 106. 152.]
[117. 105. 151.]
...---------
2.tf.keras数据集
from keras.datasets import fashion_mnist
def main():
(x_train, y_train), (x_test, y_test) = fashion_mnist.load_data()
print(x_train.shape)
print(y_train.shape)
if __name__ == '__main__':
main()
输出为:
(60000, 28, 28)
(60000,)
三 tf.keras构建网络模型步骤
1. 获取数据集
2 构建模型
import tensorflow as tf
from tensorflow.python.keras.models import Sequential
from tensorflow.python.keras.layers import Dense,Flatten
def main():
model=Sequential([
Flatten(input_shape=(28,28)),
Dense(64,activation=tf.nn.relu),
Dense(128,activation=tf.nn.relu),
Dense(10,activation=tf.nn.softmax)
])
if __name__ == '__main__':
main()
2,Sequential又称为序贯模型。
序贯模型为最简单的线性、从头到尾的结构顺序,不分叉,是多个网络层的线性堆叠。
在利用Keras进行模型构建前,只需要用如下函数建立模型就够了。
model = Sequential(flatten,Dense,)
flatten:将输入数据进行形状改变展开
Dense:添加一层神经元
Dense(units,activation=None,**kwargs)
units:神经元个数
activation:激活函数,参考(tf.nn.relu,tf.nn.sigmoid,tf.nn.softmax,tf.nn.tanh)
kwargs:输入上层输入的形状,input_shape=()
1、model.compile
model.compile在Keras中的作用主要用于定义loss函数和优化器。
其调用方式如下:
model.compile(loss='mse', optimizer='sgd', metrics=['accuracy'])
1
其中loss用于定义计算损失的损失函数,其可以选择的内容如下:
1、mse:均方根误差,常用于回归预测。
2、categorical_crossentropy:亦称作多类的对数损失,注意使用该目标函数时,需要将标签转化为形如(nb_samples, nb_classes)的二值序列,常用于分类。
3、sparse_categorical_crossentrop:如上,但接受稀疏标签。
optimizer用于定义优化器,可以使用默认的,也可以从keras.optimizers导出。上文中选择的是随机梯度下降法sgd。
metrics=[‘accuracy’]常用于分类运算中,本例子中不适用,accuracy代表计算分类精确度。
3 训练
model.fit()
(x,y,batch_size,epoch,callbacks)
x:特征值
y:目标值
batch_size: 批次大小
epochs:训练迭代次数
callbacks:添加回调列表(如用于tensorboard显示等)
评估:
model.evaluate(test,test_label)
4 预测
model.predict(test)
其他方法:
model.save_weights(file)
model.load_weights(file,by_name=False)