当前位置: 首页 > article >正文

Python + 深度学习从 0 到 1(02 / 99)

希望对你有帮助呀!!💜💜 如有更好理解的思路,欢迎大家留言补充 ~ 一起加油叭 💦
欢迎关注、订阅专栏 【深度学习从 0 到 1】谢谢你的支持!

⭐ Keras 快速入门:

神经网络的基本数据结构是层,你可以将层看作深度学习的乐高积木,Keras等框架则将这种比喻具体化

在 Keras 中,构建深度学习模型就是将相互兼容的多个层拼接在一起,以建立有用的数据变换流程

  • 相同的代码可以在CPU或GPU上无缝切换运行
  • Keras 基于宽松的MIT许可证发布,这意味着可以在商业项目中免费使用它。它与所有版本的Python都兼容
常见层实现代码示例:
  1. 全连接层[fully connected layer] 💜 .Dense
    from keras import layers 
    layer = layers.Dense(32, input_shape=(784,))  # 有32个输出单元的密集层
    
  2. 卷积层[conv layer] 💜 .Conv2D
    from keras import layers 
    layer = layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1))
    
    • input_shape:卷积神经网络接收形状为(image_height, image_width, image_channels)的输入张量(不包括批量维度)
    • padding: 不填充(默认) - “valid”,填充使得输入输出宽&高相等 - “same”
  3. 池化[pooling layer] 💜 .MaxPooling2D
    from keras import layers 
    layer = layers.MaxPooling2D((2, 2))
    

⭐ 实战:手写数字分类: Keras + MNIST 数据集

手写数字分类任务

任务:将手写数字的灰度图像(28像素×28像素)划分到10个类别中(0~9)

MNIST数据集包含60 000张训练图像和10 000张测试图像,由美国国家标准与技术研究院(National Institute of Standards and Technology,即 MNIST 中的NIST)在20世纪80年代收集得到

  • 样本示例如下:(hint: 显示数据集的第一个数字的代码:plt.imshow(train_images[0], cmap=plt.cm.binary))
💜步骤一 : 加载Keras中的MNIST数据集
from keras.datasets import mnist 
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()  # 包括4个Numpy数组

# 准备数据 
train_images = train_images.reshape((60000, 28 * 28)) 
train_images = train_images.astype('float32') / 255 
test_images  = test_images.reshape((10000, 28 * 28)) 
test_images  = test_images.astype('float32') / 255

# 准备标签
from keras.utils import to_categorical 
train_labels = to_categorical(train_labels) 
test_labels  = to_categorical(test_labels)
💜步骤二 : 构建网络架构 (两层全连接层为例)
from keras import models 
from keras import layers 

## 写法一:利用 Sequential 类定义 model
network = models.Sequential() 
network.add(layers.Dense(512, activation='relu', input_shape=(28 * 28,))) 
network.add(layers.Dense(10, activation='softmax'))  # 没指定 input_shape, 则自动匹配上一层

## 写法二:利用函数式 API 定义 model
input_tensor = layers.Input(shape=(28 * 28,)) 
x = layers.Dense(32, activation='relu')(input_tensor) 
output_tensor = layers.Dense(10, activation='softmax')(x) 
network = models.Model(inputs=input_tensor, outputs=output_tensor)

# model.summary()  # 用来打印查看网络架构 (layer + output shape + param #)

此处我们应用了最常见的(全连接)层的线性堆叠,后续博客会进一步展开其他层的网络拓扑结构如:双分支(two-branch)网络,多头(multihead)网络 和 Inception 模块

💜步骤三: 编译步骤 (optimizer + loss + metrics)
network.compile(optimizer='rmsprop', 
                loss='categorical_crossentropy', 
                metrics=['accuracy'])
💜步骤四:训练网络
network.fit(train_images, train_labels, 
			epochs=5, batch_size=128,
			validation_data=(test_images, test_labels))
💜步骤五:测试网络
 test_loss, test_acc = network.evaluate(test_images, test_labels) 

完整代码参考:

from keras.datasets import mnist 
from keras import models 
from keras import layers 


(train_images, train_labels), (test_images, test_labels) = mnist.load_data()  # 包括4个Numpy数组

# 准备数据 
train_images = train_images.reshape((60000, 28 * 28)) 
train_images = train_images.astype('float32') / 255 
test_images  = test_images.reshape((10000, 28 * 28)) 
test_images  = test_images.astype('float32') / 255

# 准备标签
from keras.utils import to_categorical  # one-hot 编码
train_labels = to_categorical(train_labels) 
test_labels  = to_categorical(test_labels)

# 构建网络架构
network = models.Sequential() 
network.add(layers.Dense(512, activation='relu', input_shape=(28 * 28,))) 
network.add(layers.Dense(10, activation='softmax'))

# 编译步骤 
# 无论你的问题是什么,rmsprop 优化器通常都是足够好的选择。这一点你无须担心
network.compile(optimizer='rmsprop', 
                loss='categorical_crossentropy', 
                metrics=['accuracy'])  ## 对于回归问题: metrics=['mae']

# 训练网络
network.fit(train_images, train_labels, epochs=5, batch_size=128)
# history = model.fit(...)
# history_dict = history.history
# history_dict.keys()  ## dict_keys(['val_acc', 'acc', 'val_loss', 'loss']), 可用于可视化训练过程

## 预测结果 (代码参考)
#label_predict = network.predict(test_images[0])

# 测试网络
test_loss, test_acc = network.evaluate(test_images, test_labels) 

print("Loss: {}, Acc: {}".format(test_loss, test_acc))

----- 结束后会得到类似如下结果:

Epoch 1/5
469/469 [==============================] - 2s 5ms/step - loss: 0.2598 - accuracy: 0.9253
Epoch 2/5
469/469 [==============================] - 2s 5ms/step - loss: 0.1041 - accuracy: 0.9692
Epoch 3/5
469/469 [==============================] - 2s 5ms/step - loss: 0.0684 - accuracy: 0.9795
Epoch 4/5
469/469 [==============================] - 2s 5ms/step - loss: 0.0492 - accuracy: 0.9848
Epoch 5/5
469/469 [==============================] - 2s 5ms/step - loss: 0.0367 - accuracy: 0.9892
313/313 [==============================] - 0s 702us/step - loss: 0.0665 - accuracy: 0.9803
Loss: 0.06652633100748062, Acc: 0.9803000092506409

参考书籍:Python 深度学习


http://www.kler.cn/a/458031.html

相关文章:

  • 人工智能(AI)简史:推动新时代的科技力量
  • 理解生成协同促进?华为诺亚提出ILLUME,15M数据实现多模态理解生成一体化
  • Python用K-Means均值聚类、LRFMC模型对航空公司客户数据价值可视化分析指标应用|数据分享...
  • 计算机网络 (7)物理层下面的传输媒体
  • socket建立客户端服务器程序
  • uniapp——APP读取bin文件,解析文件的数据内容(二)
  • 基于深度学习(HyperLPR3框架)的中文车牌识别系统-Qt调用Python
  • 在vue3中使用tsx结合render封装一个项目内通用的弹窗组件
  • Docker的概述与安装
  • 算法基础一:冒泡排序
  • React引入Echart水球图
  • systemverilog语法:assertion sequence
  • node-js Express防盗链
  • Spring Boot 多数据源解决方案:dynamic-datasource-spring-boot-starter 的奥秘(下)
  • 1.flask介绍、入门、基本用法
  • Python-网络爬虫
  • Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin(自测问题解决!)
  • 【每日学点鸿蒙知识】页面反向传值、图片撑满问题、清除Web缓存、Refresh支持swiper、POP颜色没效果
  • 验证ETL程序产生数据的正确性以及确保数据质量的方法
  • 【畅购商城】详情页详情之商品详情
  • Windows下C++使用SQLite
  • 手机联系人 查询 添加操作
  • 【VulnOSv2靶场渗透】
  • Vue.js组件开发-使用Paho MQTT数据传输
  • 德州仪器 cookie _px3 分析
  • BOOST 库在信号处理领域的具体应用及发展前景