机器学习之TensorFlow - 补充学习中20220911
文章目录
- 前言
- 一、前置基础
- 1.1 什么是神经网络
- 1.2 机器学习的类型
- 监督学习
- 无监督学习
- 强化学习
- AutoML
- 1.3 什么是线性回归
- 1.4 TensorFlow Keras
- 1.5 TensorFlow Estimator
- 1.6 案例:简单一元回归
- 1.7 模型训练流程
- 1.8 业务通讯结合
- 二、环境安装
- 2.1 CPU版本安装
- 2.2 GPU版本安装
- 三、数据预测
- 2.1 梯度下降法
- 2.2 =激活函数
- 2.3 =损失函数
- 2.4 =优化器
- 2.5 =回调函数
- 2.6 多层感知器
- 2.7 逻辑回归与交叉熵
- 2.8 待定
- 四、图像识别
- 3.1 待定
- 3.2 待定:图像识别分类
- 3.3 待定
- 总结
前言
以下内容是在学习过程中的一些笔记,难免会有错误和纰漏的地方。如果造成任何困扰,很抱歉。
TensorFlow™是一个基于数据流编程(dataflow programming)的符号数学系统,是一个功能强大的开源软件库,它由Google的布莱恩(Brain)团队开发,被广泛应用于各类机器学习(machine learning)算法的编程实现,其前身是谷歌的神经网络算法库DistBelief。
一、前置基础
描述:这里可以添加本文要记录的大概内容
1.1 什么是神经网络
我们先从人类的大脑开始构思,人的大脑都是由无数个神经元构成,神经元之间相互通过脉络链接,组成一个庞大的神经元网络。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GT4mnGTG-1662906394071)(https://csdn-pic-1301850093.cos.ap-guangzhou.myqcloud.com/csdn-pic/头脑风暴.png)]
当人看到一只猫?抑或是一只狗时,神经网络会如何处理这些信息?
当一组图像输入到神经网络中,会被拆解成无数个可识别的/不可识别的标签,经过层层算法递进,找到最终自认为正确的一个结果(是猫是狗或是其它)。
神经网络小玩具地址 |
---|
A Neural Network Playground (tensorflow.org) |
然后简单的看一下分类
单个神经网络由多个互联的神经元构成,组织形式叫层
,某一层的神经元会将消息传递到其下一层神经元(术语为“发射
”),这即是神经网络的运行方式。
具有单个线性层的模型叫做感知器,如果模型中含有多个线性层,则称之为多层感知器
(MLP)。
事实上,机器学习的模型就是一种计算函数的方法,这个函数把对应的输入映射到对应的输出上,在这个过程中,通过损失函数(待优化的内容)的一些度量指标,逐渐不断的将模型修正。
1.2 机器学习的类型
在机器学习中,根据学习方式不同,大致归为了如下几类:
- 监督学习 - Supervised Learning
- 无监督学习 - Unsupervised Learning
- 强化学习
- 元学习/AutoML - Meta Learning
监督学习
对事先处理过
的带有标签
的数据组进行训练及量化,常见的方式有
- 分类-----类别,一手房/二手房
- 回归-----连续性数据,如耗电量
无监督学习
对没有标签的数据
进行建模,对没有事先标记的、无法事先处理的数据
进行自动分类/分群,常用的算法有
- 聚类算法
- 数据降维
强化学习
通过自动调整策略获取最大期望回报,自主探索寻找最佳模型,例如AI下棋。
AutoML
将机器学习应用于现实问题的端到端流程自动化的过程,从特征工程、模型构建、超参优化三方面实现自动化。
1.3 什么是线性回归
线性回归是利用数理统计中回归分析,来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法,运用十分广泛。其表达形式为:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-md5TkXrO-1662906394072)(https://csdn-pic-1301850093.cos.ap-guangzhou.myqcloud.com/csdn-pic/机器学习入门-线性回归模型公式-2.png)]
b为误差服从均值为0的正态分布。
如果只有一个自变量的情况下就叫一元回归
;
如果有多个自变量的情况下就叫多元回归
;
以你的工资为例,影响你工资的可能因素有很多:老板赏识、工作努力、运气不错等,如果从一个相对简单的角度去思考,你的工资仅仅由领导的心情决定,通过回归,我们就可以确定领导的心情(自变量:这类变量不依赖于其他任何变量)
与工资(因变量:这类变量依赖于一个或多个自变量)
之间的关系。
1.4 TensorFlow Keras
地址 |
---|
关于TensorFlow | TensorFlow中文官网 (google.cn) |
Keras是由Python编写的高阶深度学习API,它主要面向与用户快速开发,而Keras
作为TensorFlow
的前端,屏蔽了底层较为难以理解的算法实现,对用户友好,允许简单而快速的原型设计。
1.5 TensorFlow Estimator
首先对TensorFlow基础架构组成有一个初步的了解
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AhVxZc5N-1662906394073)(https://csdn-pic-1301850093.cos.ap-guangzhou.myqcloud.com/csdn-pic/tensorflow-基础API架构分布-1.png)]
对于Estimator来说,它是一个高度封装的API,简化开发者的使用,内有许多封装好的、可以直接使用的分类及回归模型。
使用操作步骤
- 创建 x 个输入函数,
input_fn
; - 定义特征列,
feature_columns
,充当输入数据和模型之间的桥梁; - 实例化 Estimator,指定特征列和参数;
- Estimator 对象上调用一个或多个方法,传递适当的输入函数作为数据的来源(train, evaluate, predict);
什么是特征列?什么是输入函数?
特征列
充当输入数据和模型之间的桥梁,用于估算器训练的输入参数作为特征列传递,并指定模型如何解析数据。
输入函数
用于训练、评估和预测的数据需要由输入函数提供。输入函数返回一个tf.data.Dataset对象,该对象返回一个包含特征和标签的元组。
下面看看feature_columns中提供的函数使用
函数名 | 作用 | |
---|---|---|
密集数值 | categorical_column_with_identity | 每个类目都是One-Hot(独热)编码的,因此具有唯一标识。它只适用于数字值。 |
密集数值 | categorical_column_with_vocabulary_file | 当分类输入是字符串且类目在文件中给出时,使用此函数。字符串首先会转换为数字值,然后进行One-Hot编码。 |
密集数值 | categorical_column_with_vocabulary_list | 当分类输入是字符串且类目在列表中明确定义时,使用此函数。字符串首先会转换为数字值,然后进行One-Hot编码。 |
密集数值 | categorical_column_with_hash_bucket | 如果类目的数量非常大,且不可能进行One-Hot编码时,我们使用哈希。 |
密集数值 | crossed_column | 当我们希望将两列合并成单个特征来使用时,使用此函数。例如,对基于地理位置的数据,将经度值和纬度值合并为一项特征是合理的。 |
密集数值 | numeric_column | 当特征为数字时使用,它可以是单个值,甚至是矩阵。 |
分类 | indicator_column | 我们不直接使用它。当且仅当类目数量有限并可由One-Hot编码表示时,将其与分类列一起使用。 |
分类 | embedding_column | 我们不直接使用它。当且仅当类目数量非常大且不能由One-Hot编码表示时,将其与分类列一起使用。 |
分类 | bucketized_column | 当我们根据数据本身的值(而不是特定的数值)将数据划分为不同的类别时,使用此函数。 |
下面通过代码示例消化上面的内容
# 库引入
import tensorflow as tf
from tensorflow import feature_column as fc# 特征列函数预处理
numeric_column = fc.numeric_column
categorical_column_with_vocabulary_list = fc.categorical_column_with_vocabulary_list# 定义将用于训练回归器的特征列
featCols = [tf.feature_column.numeric_column("area"),tf.feature_column.categorical_column_with_vocabulary_list("type", ["bungalow", "apartment"])
]# 定义一个输入函数以提供训练的输入 该函数返回一个包含特征和标签的元组
def train_input_fn():features = {"area": [1000, 2000, 4000, 1000, 2000, 4000],"type": ["bungalow", "bungalow", "house", "apartment", "apartment", "apartment"]}labels = [500, 1000, 1500, 700, 1300, 1900]return features, labels# LinearRegressor 数据拟合
model = tf.estimator.LinearRegressor(featCols)
model.train(train_input_fn, steps=200)# 预测结果
def predict_input_fn():features = {"area": [1500, 1800],"type": ["house", "apt"]}return featurespredictions = model.predict(predict_input_fn)
print(next(predictions))
print(next(predictions))
总结知识点
- 多元输入
- 特征列函数的使用
1.6 案例:简单一元回归
简单一元线性回归,只有单一的自变量和因变量
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd# 生成具有线性关系的随机数据 自变量:area 因变量:price
np.random.seed(0)
area = 2.5 * np.random.randn(100) + 25
price = 25 * area + 5 + np.random.randint(20, 50, size=len(area))# 矩阵转换 数据处理
data = np.array([area, price])
data = pd.DataFrame(data=data.T, columns=['area', 'price'])# 绘图
# plt.scatter(data['area'], data['price'])
# plt.show()W = sum(price * (area - np.mean(area))) / sum((area - np.mean(area)) ** 2)
b = np.mean(price) - W * np.mean(area)
# print("计算回归系数", W, b)# 用得到的权重和偏差值来预测新价格
y_pred = W * area + b# 绘图
plt.plot(area, y_pred, color='red', label="forecast")
plt.scatter(data['area'], data['price'], label="train")
plt.xlabel("areaX")
plt.ylabel("priceY")
plt.legend()
plt.show()
1.7 模型训练流程
训练系统构成大致分为了四个步骤
- 数据预处理 -> 相当于数据的准备;
- 算法学习 -> 根据数据的具体情况选择合适的机器学习方式,根据不同的精度选择合适的算法;
- 模型验证;
- 模型预测;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ua8KwCQr-1662906394073)(https://csdn-pic-1301850093.cos.ap-guangzhou.myqcloud.com/csdn-pic/机器学习入门-机器学习系统构成-2.jpg)]
结合上述的库,业务开发不用太过于计较算法的核心实现,在合适的场景下选择合适的模型即可。
1.8 业务通讯结合
在Java代码中执行python文件
package org.springblade.utils;import org.springblade.core.tool.api.R;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;/*** Python工具类* @author 李家民*/
public class PythonUtils {/** Python环境变量 */private static final String PYTHON_ENV = "E:\\27_python 3\\python";/*** 执行python文件并记录* @param pathFile* @return*/public static R executeAndRecord(String pathFile) {Process proc;try {proc = Runtime.getRuntime().exec(PYTHON_ENV + " " + pathFile);BufferedReader in = new BufferedReader(new InputStreamReader(proc.getInputStream()));String line = null;StringBuilder stringBuilder = new StringBuilder();while ((line = in.readLine()) != null) {stringBuilder.append(line + "\n");}in.close();proc.waitFor();return R.data(stringBuilder);} catch (IOException e) {e.printStackTrace();return R.fail("IOException");} catch (InterruptedException e) {e.printStackTrace();return R.fail("InterruptedException");}}
}
二、环境安装
描述:这里可以添加本文要记录的大概内容
2.1 CPU版本安装
1
2.2 GPU版本安装
检查GPU是否合规
C:\Users\13544>nvidia-smi
Sun Sep 11 21:39:10 2022
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 512.52 Driver Version: 512.52 CUDA Version: 11.6 |
|-------------------------------+----------------------+----------------------+
| GPU Name TCC/WDDM | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|===============================+======================+======================|
| 0 NVIDIA GeForce ... WDDM | 00000000:01:00.0 On | N/A |
| 23% 40C P8 12W / 125W | 1156MiB / 6144MiB | 15% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------++-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
| 0 N/A N/A 2588 C+G ...ge\Application\msedge.exe N/A |
| 0 N/A N/A 3176 C+G ...r\RoundedTB\RoundedTB.exe N/A |
| 0 N/A N/A 10784 C+G C:\Windows\explorer.exe N/A |
| 0 N/A N/A 12332 C+G ...n1h2txyewy\SearchHost.exe N/A |
| 0 N/A N/A 12436 C+G ...artMenuExperienceHost.exe N/A |
| 0 N/A N/A 15260 C+G ...lPanel\SystemSettings.exe N/A |
| 0 N/A N/A 15344 C+G ...2txyewy\TextInputHost.exe N/A |
| 0 N/A N/A 15976 C+G ...d\runtime\WeChatAppEx.exe N/A |
| 0 N/A N/A 16720 C+G ...perience\NVIDIA Share.exe N/A |
| 0 N/A N/A 16756 C+G E:\56_PicGo\PicGo.exe N/A |
| 0 N/A N/A 18628 C+G ...tracted\WechatBrowser.exe N/A |
| 0 N/A N/A 20344 C+G ...y\ShellExperienceHost.exe N/A |
| 0 N/A N/A 21284 C+G ...6.1.12\NutstoreClient.exe N/A |
| 0 N/A N/A 25876 C+G ..._Typora\Typora\Typora.exe N/A |
+-----------------------------------------------------------------------------+C:\Users\13544>
英伟达的驱动版本和性能都不能低,我的是1660 Super系列,还行
三、数据预测
描述:这里可以添加本文要记录的大概内容
2.1 梯度下降法
梯度下降法,是一个致力于找到函数极值点的算法
地址 |
---|
什么是梯度下降法? - 知乎 (zhihu.com) |
下面看看Tensorflow中对于梯度下降的简单示例,是一元线性回归,数据集大家随便编造,只有两个列,一个是自变量,一个是因变量。
数据集
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BR7teLip-1662906394073)(https://csdn-pic-1301850093.cos.ap-guangzhou.myqcloud.com/csdn-pic/tensorflow-梯度下降示例-数据集-1.png)]
import tensorflow as tf
import pandas as pd# 加载数据 加载列
data = pd.read_csv('E:/27_Python_Protect/02_ml/01-识别手写数字/hello01.csv'
)
y = data.Education
x = data.Income# 导入Sequential模型 新增层
model = tf.keras.Sequential()
model.add(# 1:输出维度 1,:输入维度 是矩阵式tf.keras.layers.Dense(1, input_shape=(1,))
)
# 打印模型详情
# print(model.summary())# 模型的优化方法 损失函数选择
model.compile(optimizer='adam',loss='mse'
)# 记录训练过程 epochs:训练次数
# 训练过程中 loss值会不断下降直到无限逼近
history = model.fit(x, y, epochs=10000)# 进行预测 连续值x 预测y
preTemp = model.predict(pd.Series([23]))print("结果是 = ",preTemp)
2.2 =激活函数
从激活一词看出,这个函数在某个特定条件下才会被激活使用,通过设置单独的激活层实现,也可以在构造层对象时通过传递 activation
参数实现。
# 导入Sequential模型
model = tf.keras.Sequential([# 输出维度10 输入维度3 激活函数relutf.keras.layers.Dense(10, input_shape=(3,), activation='relu'),# 最终输出层tf.keras.layers.Dense(1)]
)
下面简单列举一下有哪些激活函数
(1)softmax
keras.activations.softmax(x, axis=-1)
- x:张量
- axis:所作用的维度
返回:softmax变换后的张量。
(2)elu
指数线性单元
keras.activations.elu(x, alpha=1.0)
- x:张量
- alpha:一个标量,表示负数部分的斜率
返回:如果 x > 0
,返回值为 x
;如果 x < 0
返回值为 alpha * (exp(x)-1)
(3)selu
1
(4)softplus
1
(5)softsign
1
(6)relu
线性函数模型,使用默认值时,它返回逐元素的 max(x, 0)
否则,它遵循:
- 如果
x >= max_value
:f(x) = max_value
, - 如果
threshold <= x < max_value
:f(x) = x
, - 否则:
f(x) = alpha * (x - threshold)
。
keras.activations.relu(x, alpha=0.0, max_value=None, threshold=0.0)
参数 | 说明 |
---|---|
x | 张量 |
alpha | 负数部分的斜率 |
max_value | 输出的最大值 |
threshold | 浮点数,阈值 |
(7)tanh
1
(8)sigmoid
它是一个概率分布函数,首先看看公式。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6VxAoxDn-1662906394074)(https://csdn-pic-1301850093.cos.ap-guangzhou.myqcloud.com/csdn-pic/tensorflow-sigmoid函数的公式示意图-1.png)]
特征列与输入值进行这个公式的计算后,得出一个0-1之间的概率值,常用于逻辑回归的解决方案。
(9)hard_sigmoid
1
(10)exponential
1
(11)linear
1
1
2.3 =损失函数
损失函数(或称目标函数、优化评分函数)是编译模型时所需的两个参数之一
# 可以这样
model.compile(optimizer='adam',loss='mse'
)# 还可以这样
model.compile(loss='mean_squared_error', optimizer='sgd')# 还能这样
from keras import losses
model.compile(loss=losses.mean_squared_error, optimizer='sgd')
下面看看可用的损失函数
# y_true: 真实标签,TensorFlow/Theano 张量
# y_pred: 预测值,TensorFlow/Theano 张量,其 shape 与 y_true 相同mean_squared_error(y_true, y_pred)mean_absolute_error(y_true, y_pred)mean_absolute_percentage_error(y_true, y_pred)mean_squared_logarithmic_error(y_true, y_pred)squared_hinge(y_true, y_pred)hinge(y_true, y_pred)categorical_hinge(y_true, y_pred)logcosh(y_true, y_pred)
2.4 =优化器
1
2.5 =回调函数
1
2.6 多层感知器
MLP
,Multilayer Perceptron,是一种前馈人工神经网络模型,其将输入的多个数据集映射到单一的输出
的数据集上。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FiZZUGB8-1662906394074)(https://csdn-pic-1301850093.cos.ap-guangzhou.myqcloud.com/csdn-pic/tensorflow-多层感知器-图解多层感知器-外面的图-1.png)]
如果从代码上看
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JFK515x3-1662906394074)(https://csdn-pic-1301850093.cos.ap-guangzhou.myqcloud.com/csdn-pic/tensorflow-多层感知器-图解多层感知器-1.png)]
下面这个案例,实际上是一个多元线性回归模型,自变量(输入)有三个
- TV
- Radio
- Newspaper
因变量(输出)则是一个
- sales
他们之间呈线性关系,接下来看看数据集
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hrxxbaty-1662906394075)(https://csdn-pic-1301850093.cos.ap-guangzhou.myqcloud.com/csdn-pic/tensorflow-多层感知器-数据集-1.png)]
代码示例
import tensorflow as tf
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt# 加载数据
data = pd.read_csv('E:/27_Python_Protect/02_ml/01-识别手写数字/hello02.csv'
)# 查看是否呈现一种线性关系 图
# plt.scatter(data.TV, data.sales)
# plt.show()# python的一种范围切割
x = data.iloc[:, 0:-1]
y = data.iloc[:, -1:]# 导入Sequential模型
model = tf.keras.Sequential([# 输出维度10 输入维度3 激活函数relutf.keras.layers.Dense(10, input_shape=(3,), activation='relu'),# 最终输出层tf.keras.layers.Dense(1)]
)# 模型详情
# print(model.summary())# 模型的优化方法 损失函数选择
model.compile(optimizer='adam',loss='mse'
)# 记录训练过程 epochs:训练次数
# 训练过程中 loss值会不断下降直到无限逼近
history = model.fit(x, y, epochs=10000)# 预测范围 前10行前3列
prediction_data_set = data.iloc[:10, 0:-1]# 进行预测 连续值x 预测y
preTemp = model.predict(prediction_data_set)print("结果是 = ", preTemp)
2.7 逻辑回归与交叉熵
与线性回归不同,逻辑回归指的是 是与否的回答,并且搭配交叉熵损失函数,刻画实际输出与期望输出的距离,来得到最终答案。
首先查看数据集
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zxlaFE4X-1662906394075)(https://csdn-pic-1301850093.cos.ap-guangzhou.myqcloud.com/csdn-pic/tensorflow-逻辑回归与交叉熵的数据集简图-1.png)]
通过前面的数据,得出最后的数据是1还是-1,然后看看代码
import tensorflow as tf
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt# 加载数据 header=None 意思是没有列头
data = pd.read_csv('E:/27_Python_Protect/02_ml/01-识别手写数字/credit-a.csv', header=None
)# print(data.head())# 取值 特征数据 目标数据
x = data.iloc[:, :-1]
y = data.iloc[:, -1:].replace(-1, 0)# 导入Sequential模型
model = tf.keras.Sequential([tf.keras.layers.Dense(4, input_shape=(15,), activation='relu'),tf.keras.layers.Dense(4, activation='relu'),tf.keras.layers.Dense(1, activation='sigmoid')]
)# 模型的优化方法 损失函数选择 === metrics 计算正确率 评估指标算子
model.compile(optimizer='adam',loss='binary_crossentropy',metrics=['acc']
)history = model.fit(x, y, epochs=10000)# 预测代码忽略...
没太学明白,后面再继续
2.8 待定
1
四、图像识别
描述:这里可以添加本文要记录的大概内容
3.1 待定
1
3.2 待定:图像识别分类
这个案例将训练一个神经网络模型,对运动鞋和衬衫等服装图像进行分类。
(1)数据准备及处理
首先导入相关的类库和数据集。
# TensorFlow and tf.keras
import tensorflow as tf
from tensorflow import keras# Helper libraries
import numpy as np
import matplotlib.pyplot as plt# 数据集导入
fashion_mnist = keras.datasets.fashion_mnist
(train_images, train_labels), (test_images, test_labels) = fashion_mnist.load_data()
该数据集包含 10 个类别的 70,000 个灰度图像。这些图像以低分辨率(28x28 像素)展示了单件衣物。
加载数据集会返回四个 NumPy 数组:
train_images
和train_labels
数组是训练集,即模型用于学习的数据;- 测试集、
test_images
和test_labels
数组会被用来对模型进行测试;
我们针对这些标签进行一个简单的分类
# 将图像的标签分类
class_names = ['T-shirt/top', 'Trouser', 'Pullover', 'Dress', 'Coat','Sandal', 'Shirt', 'Sneaker', 'Bag', 'Ankle boot']
标签 | 类 |
---|---|
0 | T恤/上衣 |
1 | 裤子 |
2 | 套头衫 |
3 | 连衣裙 |
4 | 外套 |
5 | 凉鞋 |
6 | 衬衫 |
7 | 运动鞋 |
8 | 包 |
9 | 短靴 |
# 浏览数据集
print(train_images.shape)
print(len(train_labels))
print(train_labels)
预处理数据 此时展示的是图像原始像素大小
# 预处理数据 此时展示的是图像原始像素大小
plt.figure()
plt.imshow(train_images[0])
plt.colorbar()
plt.grid(False)
plt.show()
需要将这些值缩小至0到1之间,然后将其馈送到神经网络模型
# 将这些值缩小至0到1之间 然后将其馈送到神经网络模型
train_images = train_images / 255.0
test_images = test_images / 255.0# 验证数据的格式是否正确
plt.figure(figsize=(10, 10))
for i in range(25):plt.subplot(5, 5, i + 1)plt.xticks([])plt.yticks([])plt.grid(False)plt.imshow(train_images[i], cmap=plt.cm.binary)plt.xlabel(class_names[train_labels[i]])
plt.show()
(2)模型构建及训练
构建神经网络前
- 配置模型的层;
- 编译模型;
# 构建模型 -- 设置层
model = keras.Sequential([keras.layers.Flatten(input_shape=(28, 28)),keras.layers.Dense(128, activation='relu'),keras.layers.Dense(10)
])
第一层网络:keras.layers.Flatten,将图像格式从二维数组(28 x 28 像素)转换成一维数组(28 x 28 = 784 像素)。将该层视为图像中未堆叠的像素行并将其排列起来。
第二、三层网络:keras.layers.Dense,两层神经元序列。
# 编译模型
model.compile(optimizer='adam',loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),metrics=['accuracy'])# 训练模型
model.fit(train_images, train_labels, epochs=10)# 评估准确率
test_loss, test_acc = model.evaluate(test_images, test_labels, verbose=2)
print('\n 评估准确率 Test accuracy:', test_acc)
(3)预测/最终效果
这里我就偷懒一下吧
probability_model = tf.keras.Sequential([model,tf.keras.layers.Softmax()])
predictions = probability_model.predict(test_images)# 效果查看
# predictions[0]
# test_labels[0]# 图表绘制方法
def plot_image(i, predictions_array, true_label, img):predictions_array, true_label, img = predictions_array, true_label[i], img[i]plt.grid(False)plt.xticks([])plt.yticks([])plt.imshow(img, cmap=plt.cm.binary)predicted_label = np.argmax(predictions_array)if predicted_label == true_label:color = 'blue'else:color = 'red'plt.xlabel("{} {:2.0f}% ({})".format(class_names[predicted_label],100 * np.max(predictions_array),class_names[true_label]),color=color)def plot_value_array(i, predictions_array, true_label):predictions_array, true_label = predictions_array, true_label[i]plt.grid(False)plt.xticks(range(10))plt.yticks([])thisplot = plt.bar(range(10), predictions_array, color="#777777")plt.ylim([0, 1])predicted_label = np.argmax(predictions_array)thisplot[predicted_label].set_color('red')thisplot[true_label].set_color('blue')# 验证预测结果1
# i = 1
# plt.figure(figsize=(6, 3))
# plt.subplot(1, 2, 1)
# plot_image(i, predictions[i], test_labels, test_images)
# plt.subplot(1, 2, 2)
# plot_value_array(i, predictions[i], test_labels)
# plt.show()# 用模型的预测绘制几张图像
# Plot the first X test images, their predicted labels, and the true labels.
# Color correct predictions in blue and incorrect predictions in red.
num_rows = 5
num_cols = 3
num_images = num_rows * num_cols
plt.figure(figsize=(2 * 2 * num_cols, 2 * num_rows))
for i in range(num_images):plt.subplot(num_rows, 2 * num_cols, 2 * i + 1)plot_image(i, predictions[i], test_labels, test_images)plt.subplot(num_rows, 2 * num_cols, 2 * i + 2)plot_value_array(i, predictions[i], test_labels)
plt.tight_layout()
plt.show()
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yePQL5B9-1662906394075)(https://csdn-pic-1301850093.cos.ap-guangzhou.myqcloud.com/csdn-pic/tensorflow-图像衣服分类的效果图-1.png)]
(4)完整代码
# TensorFlow and tf.keras
import tensorflow as tf
from tensorflow import keras# Helper libraries
import numpy as np
import matplotlib.pyplot as plt# 数据集导入 图像与标签 训练集与测试集
fashion_mnist = keras.datasets.fashion_mnist
(train_images, train_labels), (test_images, test_labels) = fashion_mnist.load_data()# 将图像的标签分类
class_names = ['T-shirt/top', 'Trouser', 'Pullover', 'Dress', 'Coat','Sandal', 'Shirt', 'Sneaker', 'Bag', 'Ankle boot']# 将这些值缩小至0到1之间 然后将其馈送到神经网络模型
train_images = train_images / 255.0
test_images = test_images / 255.0# 构建模型 -- 设置层
model = keras.Sequential([keras.layers.Flatten(input_shape=(28, 28)),keras.layers.Dense(128, activation='relu'),keras.layers.Dense(10)
])# 编译模型
model.compile(optimizer='adam',loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),metrics=['accuracy'])# 训练模型
model.fit(train_images, train_labels, epochs=10)# 评估准确率
test_loss, test_acc = model.evaluate(test_images, test_labels, verbose=2)
print('\n 评估准确率 Test accuracy:', test_acc)# 预测
probability_model = tf.keras.Sequential([model,tf.keras.layers.Softmax()])
predictions = probability_model.predict(test_images)# 效果查看
# predictions[0]
# test_labels[0]# 图表绘制方法
def plot_image(i, predictions_array, true_label, img):predictions_array, true_label, img = predictions_array, true_label[i], img[i]plt.grid(False)plt.xticks([])plt.yticks([])plt.imshow(img, cmap=plt.cm.binary)predicted_label = np.argmax(predictions_array)if predicted_label == true_label:color = 'blue'else:color = 'red'plt.xlabel("{} {:2.0f}% ({})".format(class_names[predicted_label],100 * np.max(predictions_array),class_names[true_label]),color=color)def plot_value_array(i, predictions_array, true_label):predictions_array, true_label = predictions_array, true_label[i]plt.grid(False)plt.xticks(range(10))plt.yticks([])thisplot = plt.bar(range(10), predictions_array, color="#777777")plt.ylim([0, 1])predicted_label = np.argmax(predictions_array)thisplot[predicted_label].set_color('red')thisplot[true_label].set_color('blue')# 验证预测结果1
# i = 1
# plt.figure(figsize=(6, 3))
# plt.subplot(1, 2, 1)
# plot_image(i, predictions[i], test_labels, test_images)
# plt.subplot(1, 2, 2)
# plot_value_array(i, predictions[i], test_labels)
# plt.show()# 用模型的预测绘制几张图像
# Plot the first X test images, their predicted labels, and the true labels.
# Color correct predictions in blue and incorrect predictions in red.
num_rows = 5
num_cols = 3
num_images = num_rows * num_cols
plt.figure(figsize=(2 * 2 * num_cols, 2 * num_rows))
for i in range(num_images):plt.subplot(num_rows, 2 * num_cols, 2 * i + 1)plot_image(i, predictions[i], test_labels, test_images)plt.subplot(num_rows, 2 * num_cols, 2 * i + 2)plot_value_array(i, predictions[i], test_labels)
plt.tight_layout()
plt.show()
3.3 待定
1
总结
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容。
机器学习之TensorFlow - 补充学习中20220911相关推荐
- 福利 | Python、深度学习、机器学习、TensorFlow 好书推荐
在上次的送书活动中,营长做了个调查问卷,结果显示大家更喜欢深度学习.Python以及TensorFlow方面的书,所以这期送书活动一并满足大家.本期图书选自人民邮电出版社图书,包括:近期AI圈儿比较流 ...
- 资源 | Intel发布AI免费系列课程3部曲:机器学习基础、深度学习基础以及TensorFlow基础
翻译 | AI科技大本营(公众号ID:rgznai100) 校对 | 成龙 编辑 | 明明 Intel于近期发布了三门AI系列的免费课程,分别是关于机器学习基础.深度学习基础.TensorFlow基础 ...
- 深度学习利器:TensorFlow在智能终端中的应用——智能边缘计算,云端生成模型给移动端下载,然后用该模型进行预测...
前言 深度学习在图像处理.语音识别.自然语言处理领域的应用取得了巨大成功,但是它通常在功能强大的服务器端进行运算.如果智能手机通过网络远程连接服务器,也可以利用深度学习技术,但这样可能会很慢,而且只有 ...
- 我的机器学习入门之路(中)——深度学习(自然语言处理)
继上一篇<我的机器学习入门之路(上)--传统机器学习>,这一篇博客主要记录深度学习(主要是自然语言处理)这一块内容的学习过程.以下均将自然语言处理简称NLP. 这一块内容的学习路线分为三部 ...
- ML之模型文件:机器学习、深度学习中常见的模型文件(.h5、.keras)简介、h5模型文件下载集锦、使用方法之详细攻略
ML之模型文件:机器学习.深度学习中常见的模型文件(.h5..keras)简介.h5模型文件下载集锦.使用方法之详细攻略 目录 ML/DL中常见的模型文件(.h5..keras)简介及其使用方法 一. ...
- 机器学习知识总结 —— 12. 机器与深度学习中常用术语 [D-J]
文章目录 Darknet Data / 数据 Dataset / 数据集 Deploy / 部署 Differentiable / 可微的 Distributed / 分布式 Domain Speci ...
- TensorFlow深度学习算法原理与编程实战 人工智能机器学习技术丛书
作者:蒋子阳 著 出版社:中国水利水电出版社 品牌:智博尚书 出版时间:2019-01-01 TensorFlow深度学习算法原理与编程实战 人工智能机器学习技术丛书 ISBN:97875170682 ...
- 独家 | 手把手教你在试验中修正机器学习模型(附学习资源)
作者:Seth DeLand 翻译:王威力 校对:万文菁 本文约1800字,建议阅读8分钟. 本文是一个循序渐进的指南,包括如何预处理数据和从中生成特征.并且还包含其他示例资源的链接,以帮助您探索有关 ...
- Tensorflow学习笔记6:解决tensorflow训练过程中GPU未调用问题
Tensorflow学习笔记6:解决tensorflow训练过程中GPU未调用问题 参考文章: (1)Tensorflow学习笔记6:解决tensorflow训练过程中GPU未调用问题 (2)http ...
最新文章
- ES6 -Set 和 Map 数据结构
- 可变参数中size_t遇见的问题
- Sublime3安装过程及常用插件安装及常用快捷键
- poj 1329(求三角形外接圆)
- 输变电设备物联网节点设备无线组网协议_SmartModule物联网智能测控组件
- 在页面加载完后执行jQuery代码
- 日志log4cxx 封装、实例讲解、配置文件log4cxx.properties
- PyTorch | torch.randperm()使用方法
- 信贷系统学习总结(3)——现金贷之产品架构和信审系统
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(67)-MVC与ECharts
- AD19无法生成PCB_PCB制造拥抱AI
- 大学生科技立项项目申报书超详细写作规范
- plsql导出表结构到excel_PLSQL导出表结构和数据的三种方式
- 学习计算机语言入门必看
- IOT:基于oblog的应用
- 鱼缸悬浮很多微小气泡_为什么说鱼缸存有大量细微气泡,可能造成观赏鱼的死亡?...
- 麻省理工大学公开课笔记:算法导论(二)——课程简介及算法分析
- 注册中国移动物联网平台账号
- vue的一些心得总结
- java ffmpeg 合并视频_ffmpeg 合并拼接 mp4视频
热门文章
- java设计手机便签,解读一加手机系统便签App的设计和功能、易用性
- 将State/SE16.0中的dta格式数据存成excel的命令
- Hadamard积 学习笔记(张贤达《矩阵分析与应用》)
- 【IDEA系列】详述使用 IntelliJ IDEA 解决 jar 包冲突的问题
- 加强舆情监控有哪些方法,互联网舆情监控平台有哪些?
- AndroidStudio对M1芯片的兼容
- android 撒花动画,Android仿QQ聊天撒花特效 很真实
- Goldeneye靶机实操
- 数据湖揭秘—Delta Lake
- 计算机系统安全知识: jiuARP欺骗 + Dos与DDOS trinoo +nmap简单实验+ 网关网段的知识