一. Keras介绍
- Keras是一个用python编写的开源神经库,能够运行子在Tensoflow,Micsrosoft Cognitive
Toolkit,Theano或PlaidML之上,kerea是单独是深度学习框架,一些代码用到了Tnesorflow的API,但在TensorFlow1.9新增加了tf.kerea。Keras与TF的深度集成。
二. 为什么使用keras
- keras提供了一致且简单的API,将常见的用例所需的用户操作数量降至最低。
- Keras与底层深度学习语言(特别是TensorFlow)集成在一起,它可以实现你用基础语言编写的东西,特别的,tf.keras作为Keras API可以与Tensorflow无缝集成。
- Keras被工业界与学术界广泛采用。
三、tf.keras的常见方法:
keras官方文档:https://keras.io/zh/
其中:
-
layers用于构建构建神经网络,包括全连接层、卷积层、池化层等。
-
looses可以提供现成的损失函数,包括均方误差、交叉熵等。
-
models:用于定义模型的模块,包括序列模型、函数式模型等。
-
metrics是提供评估的指标,例如我们熟知的准确率、精确率、召回率、增长率,除此之外还有转化率、用户留存率、平均访问时长、用户满意度等。
-
preprocessing提供数据的预处理,数据预处理包括数据清洗、数据集成、数据转换、数据规约等步骤。常见的数据预处理方法包括缺失值处理、异常值处理、数据归一化、特征选择等。
四. 图片的读取处理:
** form tensorflow . python . keras . preprocessing . image **
-
可以直接使用tensorflow.keras.preprocessing.image,而不用去.python,但在pycharm可能回找不到keras.。在使用image方法前要确保下载了 pip install pillow ,因为image的一些方法是基于它编写的。
-
读取图像的方法:
tensorflow . python . keras . preprocessing . image import load_img
load_img(path= , target= ) 读取图像
- path: 图片的路径
- target::图片的目标大小
- 返回的是一个PIL.JpegImage.JpeImageFile对象,如果打印它,它的结果可以是:
五. 图片的特征值处理
-
图片的大小调整:因为一些深度学习神经网络回要求图片的大小为特定的值。 b. 类型转化换:keras读取图片的方法是keras. preprocessing .
-
image,但Tensorflow也有自己读取图片的方法tf.data.Dataset。它们读取数据返回的类型都不一样,故keras读取图片要经过类型转换才能给tensorflwo使用。
-
PIL图像对象可以直接用于图像处理,如缩放、剪裁等操作。但是,在进行深度学习模型训练时,通常需要将图像转换为数组的形式输入模型。因此,需要使用img_to_array函数将PIL图像对象转换为NumPy数组。
- keras图片的类型转换如下:
img_to_array(img= ,data_format=None ,dtype =None) 图片转换为数组格式
-
img: PIL lmage instance(PIL图像实例),也就是 load_img方法的返回类型
-
data_format: 字符串
指定返回的Numpy数组的通道顺序,默认为None,表示使用Keras配置文件中的设置。可以设置为"channels_first"或"channels_last",分别表示返回的Numpy数组的通道顺序为通道数在前或在后。 -
img_to_array 和load_img都在tensorflow . python . keras . preprocessing .image中.
六、编程实例
```python form tensorflow . python . keras . preprocessing . image loda_img img to_array image = loda_img("./bus/100.jpg", target_size=(300,300)) print(image) image = ima_to_array(image) print(image.shipe) print(image) ```
- 第一个打印出来的是PIL.JpegImage.JpeImageFile对象
- 第二个是用shape打印PIL.JpegImage.JpeImageFile对象转换出来的数组对象的形状
第三个打印的是数组,它由0到255之间的整数构成
- 上面说使用img_to_array函数将PIL图像对象转换为NumPy数组,这个数组中的数字就是图像的像素值,在下面打印的数组就是个例子。数组内数字通常是一个0到255之间的整数,如果需要将像素值归一化到0到1之间,可以将数组中的每个元素除以255。
- 既然提到了归一化,我们谈谈为什么要对img_to_array函数返回的数组进行归一化?其目的是为了使得模型的训练更加稳定和快速。具体来说,归一化可以带来以下几个好处:
-
加速模型的训练:归一化可以使得模型的训练更加稳定,加速模型的收敛速度,减少训练时间。
-
提高模型的精度:归一化可以减少特征之间的差异,避免模型因为特征之间的差异而出现过拟合或欠拟合的情况,提高模型的泛化能力和精度。
-
方便模型的优化:归一化可以使得特征的值域范围在一个比较小的范围内,避免特征的值过大或过小,导致梯度消失或梯度爆炸的情况,方便模型的优化。