文章目录

  • 对于简单线性模型的机器学习
  • 对简单像素图片的学习
  • 构建简单的卷积神经网络
    • 一维卷积
    • 二维卷积
    • 三维卷积

对于简单线性模型的机器学习

对于以下对应 x x x, y y y的值来预测当 x = 10 x = 10 x=10时 y y y的值

x y
-1 -3
0 -1
1 1
2 3
3 5
4 7

通过找规律发现这是一个关于 y = 2 x − 1 y = 2x - 1 y=2x−1线性模型,那么对于机器而言如何让他做出对 x = 10 x = 10 x=10时 y y y值的判断呢?

代码如下:

from tensorflow import keras
import numpy as np
# 构建模型
model = keras.Sequential([keras.layers.Dense(units=1,input_shape=[1])])
model.compile(optimizer='sgd',loss='mean_squared_error')
# 准备训练数据,将x,y值存在浮点型数组里
x = np.array([-1.0,0.0,1.0,2.0,3.0,4.0], dtype=float)
y = np.array([-3.0,-1.0,1.0,3.0,5.0,7.0], dtype=float)
# 训练模型
model.fit(x,y,epochs=500)
# 使用模型
print(model.predict([10.0]))
  • 这里我们调用TensorFlow中的Keras库。使用Keras中的Sequential (序贯模型),序贯模型是函数式模型的简略版,为最简单的线性、从头到尾的结构顺序,不分叉,是多个网络层的线性堆叠。Sequential 需要接收一个表示尺寸的元组给第一层模型。
  • keras.layers.Dense()是全连接层函数。这里units=1代表是一维的,input_shape=[1]代表输入一个 x x x值。
  • model.compile(optimizer=‘sgd’,loss=‘mean_squared_error’)定义模型并指定随机梯度下降(sgd)优化算法和均值误差(mean_squared_error)损失函数的情况,用于回归类型问题。
  • model.fit()将训练数据在模型中训练一定次数,返回loss和测量指标

运行结果:

由此可见,随着训练次数的增加损失函数loss的值在不断变小,说明训练是有效的。

最后的预测结果为18.98758,可见跟正确答案19是非常接近的。

对简单像素图片的学习

这里我们的训练数据采用Keras数据库中的Fashion-MNIST数据集。

Fashion-MNIST总共有十个类别的图像。每一个类别由训练数据集6000张图像和测试数据集1000张图像。所以训练集和测试集分别包含60000张和10000张。每一个输入图像的高度和宽度均为28像素。如图:


代码如下:

import tensorflow as tf
from tensorflow import keras
#加载数据集 text_labels = ['t-shirt', 'trouser', 'pullover', 'dress', 'coat', 'sandal', 'shirt', 'sneaker', 'bag', 'ankle boot']
fashion_mnist = keras.datasets.fashion_mnist
(train_images,train_labels),(test_images,test_labels) = fashion_mnist.load_data()
#构建模型
model = keras.Sequential()
model.add(keras.layers.Flatten(input_shape=(28,28))) #输入层
model.add(keras.layers.Dense(128,activation=tf.nn.relu)) #中间层
model.add(keras.layers.Dense(10,activation=tf.nn.softmax)) #输出层
#训练模型
train_images_scaled = train_images/255 #变成0-1之间的数效果会更好
model.compile(optimizer=tf.optimizers.Adam(),loss=tf.losses.sparse_categorical_crossentropy,metrics=['accuracy'])
model.fit(train_images_scaled,train_labels,epochs=5)
#测试模型
test_images_scaled = test_images/255
model.evaluate(test_images_scaled,test_labels)
#预测单张图片
import numpy as np
import matplotlib.pyplot as plt
print(np.argmax(model.predict([[(test_images[0]/255).reshape(1,28,28)]])))
print(test_labels[0])

其中构建了一个三层结构的模型如下:

  • 第一层中keras.layers.Flatten()用于将输入层的数据压成一维的数据.

  • 第二层运用了激活函数ReLU。ReLU函数是一种通用的激活函数,根据经验,您可以从使用ReLU函数开始,然后在ReLU不能提供最佳结果的情况下转移到其他激活函数。

  • 第三层运用了Softmax函数作为激活函数。softmax函数可用于多类分类问题。这个函数返回属于每个类的数据点的概率。

运行结果:

可见该模型loss逐渐减少,accuracy逐渐增加。最后预测单张图片预测结果是9号标签,预测成功。

构建简单的卷积神经网络

上述方法我们构建的是全连接层,在此基础上我们来构建卷积层。

一维卷积

其中一维卷积常用在序列模型、自然语言处理领域;
假设输入数据维度为8,filter维度为5;不加padding时,输出维度为4,如果filter的数量为16,那么输出数据的shape就是 4 × 16 4\times16 4×16;

二维卷积

二维卷积常用在计算机视觉、图像处理领域(在视频的处理中,是对每一帧图像分别利用CNN来进行识别,没有考虑时间维度的信息);

假设原始图像 shape 为 14 × 14 × 3 14\times14\times3 14×14×3(其中3为3个通道),使用32个大小为 5 × 5 × 3 5\times5\times3 5×5×3(其中3为深度,与通道数相同)的卷积核对其进行卷积,得到特征图的shape为 10 × 10 × 32 10\times10\times32 10×10×32;

三维卷积

三维卷积就是在神经网络的输入中增加时间这个维度(连续帧),神经网络就可以同时提取时间和空间特征,进行行为识别、视频处理;

上图的三维卷积是对连续的三帧图像进行卷积操作(堆叠多个连续帧组成一个立方体,在立方体中利用三维卷积核进行卷积,这样得到的每个特征map都与上一层中3个邻近的连续帧相连);

因此我们采用的是二维卷积
代码如下:

import tensorflow as tf
from tensorflow import keras
#加载数据集 text_labels = ['t-shirt', 'trouser', 'pullover', 'dress', 'coat', 'sandal', 'shirt', 'sneaker', 'bag', 'ankle boot']
fashion_mnist = keras.datasets.fashion_mnist
(train_images,train_labels),(test_images,test_labels) = fashion_mnist.load_data()
#构建卷积神经网络模型
model = keras.Sequential()
#构建卷积层
model.add(keras.layers.Conv2D(64,(3,3),activation='relu',input_shape=(28,28,1))) #构建二维卷积层进行过滤
model.add(keras.layers.MaxPooling2D(2,2)) #进行特征加强
model.add(keras.layers.Conv2D(64,(3,3),activation='relu')) #重复提高效果,但重复多容易过拟合
model.add(keras.layers.MaxPooling2D(2,2))model.add(keras.layers.Flatten()) #输入层
model.add(keras.layers.Dense(128,activation=tf.nn.relu)) #中间层
model.add(keras.layers.Dense(10,activation=tf.nn.softmax)) #输出层
#训练模型
train_images_scaled = train_images/255
model.compile(optimizer=tf.optimizers.Adam(),loss=tf.losses.sparse_categorical_crossentropy,metrics=['accuracy'])
model.fit(train_images_scaled.reshape(-1,28,28,1),train_labels,epochs=5)
  • Conv2D(64,(3,3),activation=‘relu’,input_shape=(28,28,1))表示在二维卷积中构建64个 3 × 3 3\times3 3×3的过滤器,采用Relu激活函数,输入为 28 × 28 28\times28 28×28像素、灰度为1的图片。
  • max pooling 的目标是把卷积操作得到的结果进一步“挤压”出更有用的信息,有点类似于用力拧毛巾,把不必要的水分给挤兑掉。max pooling 其实是把一个二维矩阵取最大值进行2*2的分块,这部分跟前面描述的卷积很像,具体操作如下图:

  • 之后的重复虽然shape没有改变,但参数是不一样的,不一样的参数意味着在提取不同的特征。这样能够提取更抽象、更本质的特征。虽然重复卷积可以提取出高级的特征,但卷积的深度并不是越多越好,要和训练集匹配以避免过拟合。
  • train_images_scaled.reshape(-1,28,28,1) 如果等于-1的话,那么Numpy会根据剩下的维度计算出数组的另外一个shape属性值。

运行结果:

可见在采用卷积神经网络后精度有所上升,但是运行时间会大为增加。

各层结构如下:

  • 第一行中用64个 3 × 3 3\times3 3×3的过滤器去处理 28 × 28 28\times28 28×28像素图片,所以 28-3+1=26个像素。参数个位 ( 3 ∗ 3 + 1 ) ∗ 64 (3*3+1)*64 (3∗3+1)∗64,其中+1是自动添加的一个blas。
  • 第二行加强特征将行列数各减半所以变成 ( 13 , 13 , 64 ) (13,13,64) (13,13,64)

机器学习 —— 简单模型的构建相关推荐

  1. 【火炉炼AI】机器学习031-KNN回归器模型的构建

    [火炉炼AI]机器学习031-KNN回归器模型的构建 (本文所使用的Python库和版本号: Python 3.6, Numpy 1.14, scikit-learn 0.19, matplotlib ...

  2. 【火炉炼AI】机器学习012-用随机森林构建汽车评估模型及模型的优化提升方法

    [火炉炼AI]机器学习012-用随机森林构建汽车评估模型及模型的优化提升方法 [本文所使用的Python库和版本号]: Python 3.5, Numpy 1.14, scikit-learn 0.1 ...

  3. R语言caret包构建机器学习回归模型(regression model)、使用DALEX包进行模型解释分析、特征重要度、偏依赖分析等

    R语言caret包构建机器学习回归模型(regression model).使用DALEX包进行模型解释分析.特征重要度.偏依赖分析等 目录

  4. R语言使用caretEnsemble包的caretStack函数把多个机器学习模型融合成一个模型、构建融合(集成)预测模型、使用融合模型进行预测推理

    R语言使用caretEnsemble包的caretStack函数把多个机器学习模型融合成一个模型.构建融合(集成)预测模型.自定义融合模型的trainControl参数.method参数.评估指标参数 ...

  5. 2.gazebo手动构建简单模型

    学习目标: 构建一个建议小车模型 添加一个插件 测试插件功能 1.进入模型编辑 启动gazebo后选择菜单栏的edit下的editor model,即可进入模型编辑模式. 2.界面介绍 工具栏,和主界 ...

  6. Gazebo学习--第二讲:构建一个简单模型

    第二讲 建立一个简单模型 概述 本讲将详细介绍SDF模型对象. SDF模型可以描述从简单的形状到复杂的机器人.它指的是<model> SDF标签,本质上是链接,关节,碰撞对象,视觉效果和插 ...

  7. R语言使用glm函数构建泊松对数线性回归模型处理三维列联表数据构建饱和模型、使用step函数基于AIC指标实现逐步回归筛选最佳模型、使用summary函数查看简单模型的汇总统计信息

    R语言使用glm函数构建泊松对数线性回归模型处理三维列联表数据构建饱和模型.使用step函数基于AIC指标实现逐步回归筛选最佳模型.使用summary函数查看简单模型的汇总统计信息 目录

  8. 【小白学PyTorch】6.模型的构建访问遍历存储(附代码)

    <<小白学PyTorch>> 小白学PyTorch | 5 torchvision预训练模型与数据集全览 小白学PyTorch | 4 构建模型三要素与权重初始化 小白学PyT ...

  9. 机器学习 对模型进行惩罚_使用Streamlit对机器学习模型进行原型制作

    机器学习 对模型进行惩罚 GitHub Repo: ml-streamlit-demo GitHub存储库: ml-streamlit-demo Bringing a Machine Learning ...

最新文章

  1. Linux环境下的堆栈--调试C程序
  2. core Animation之CAKeyframeAnimation(关键帧动画)
  3. android log耗性能吗,一个高性能的Android日志库
  4. Spring 概念及特点 Spring下载地址 控制反转IoC实现原理
  5. 谈谈无头电商 - headless commerce
  6. 我的2020(年终总结)
  7. C语言 __FUNCTION__ - C语言零基础入门教程
  8. java泛型的作用及其基本概念
  9. 魅族m8开发 step by step(1)(让程序跑起来)
  10. anaconda同时集成Python2 和 Python3
  11. 4~20mA变送器量程与输入电流、输出电流的关系
  12. 【Django】基于PythonWeb的Django框架设计实现天天生鲜系统-5数据库操作
  13. ps切图后 JAVA开发_两种ps切图方法(图层/切片)
  14. html 页面换皮肤,HTML中如何实现更换网页皮肤
  15. 数据可视化利器D3.js教程 API
  16. 更改公众号名称对用户关注的影响
  17. 致读者:冰河技术微信公众号的重大调整!!
  18. 2022-2028全球钢材防火涂料行业调研及趋势分析报告
  19. vscode 快捷键高效写代码
  20. Oracle表空间(tablespaces)简介

热门文章

  1. dp / 算术几何均值不等式 求 正整数拆分后的最大乘积
  2. BOM(材料清单)整理及文件格式说明
  3. java与javax有什么区别?
  4. 关于EJB,为什么用EJB?为什么不用EJB?
  5. centos8 内核升级
  6. Coursera视频无法播放解决办法
  7. 机器学习系列(三)——误差(error),偏差(bias),方差(variance)
  8. scratch-blocks教程(一)
  9. 主成分分析(PCA)原理及R语言实现及分析实例
  10. Java 8最强教程