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

【机器学习】从零开始理解深度学习——揭开神经网络的神秘面纱

【机器学习】从零开始理解深度学习——揭开神经网络的神秘面纱

1. 引言

深度学习是机器学习的一个重要分支,通过多层神经网络处理复杂数据,广泛应用于图像识别、自然语言处理等领域。我们将在这篇文章中揭开深度学习和神经网络的神秘面纱。
在这里插入图片描述

2. 什么是神经网络?

神经网络由大量“神经元”组成,模拟生物神经元的连接。它通过训练数据调整权重来学习复杂模式。

神经网络的代码示例

我们用 Keras 构建一个简单的神经网络模型:

from keras.models import Sequential
from keras.layers import Dense# 创建一个简单的神经网络模型
model = Sequential()
model.add(Dense(32, input_dim=8, activation='relu'))  # 输入层和第一个隐藏层
model.add(Dense(16, activation='relu'))  # 第二个隐藏层
model.add(Dense(1, activation='sigmoid'))  # 输出层# 编译模型
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])# 打印模型结构
model.summary()

在这里插入图片描述

3. 前馈神经网络 (Feedforward Neural Network, FNN)

前馈神经网络是最简单的网络架构,数据从输入层单向流动到输出层。

示例代码:

python复制代码import numpy as np# 输入数据
X = np.array([[0,0], [0,1], [1,0], [1,1]])
y = np.array([[0], [1], [1], [0]])  # XOR 问题# 前馈网络计算
model = Sequential()
model.add(Dense(4, input_dim=2, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='mean_squared_error', optimizer='adam', metrics=['binary_accuracy'])# 训练模型
model.fit(X, y, epochs=1000, verbose=0)# 预测输出
print(model.predict(X))

4. 反向传播与梯度下降

反向传播算法用于计算误差并更新神经网络中的权重。梯度下降算法则是通过最小化损失函数来优化权重。

示例代码:

python复制代码# 模型编译时指定使用反向传播和梯度下降算法
model.compile(loss='binary_crossentropy', optimizer='sgd', metrics=['accuracy'])# 训练模型时,反向传播自动发生
model.fit(X, y, epochs=100)

在这里插入图片描述

5. 深度神经网络 (Deep Neural Network, DNN)

深度神经网络拥有多层隐藏层,能够学习到复杂的特征。

示例代码:

python复制代码# 深度神经网络
model = Sequential()
model.add(Dense(64, input_dim=8, activation='relu'))  # 第一层
model.add(Dense(32, activation='relu'))  # 第二层
model.add(Dense(16, activation='relu'))  # 第三层
model.add(Dense(1, activation='sigmoid'))  # 输出层# 编译模型
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])# 训练模型
model.fit(X, y, epochs=100)

6. 常见激活函数

神经网络通过激活函数为网络引入非线性能力。

示例代码:不同激活函数的应用

python复制代码# 使用 Sigmoid 激活函数
model.add(Dense(64, activation='sigmoid'))# 使用 Tanh 激活函数
model.add(Dense(64, activation='tanh'))# 使用 ReLU 激活函数
model.add(Dense(64, activation='relu'))

7. 优化算法

优化算法决定了权重更新的方式,常用的优化算法包括梯度下降和 Adam。

示例代码:Adam 优化器

python复制代码# 使用 Adam 优化器
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])# 使用 SGD 优化器
model.compile(optimizer='sgd', loss='binary_crossentropy', metrics=['accuracy'])

8. 深度学习框架介绍

现代深度学习依赖于强大的框架,如 TensorFlow 和 PyTorch。下面是使用 TensorFlow 构建一个简单模型的示例。

示例代码:使用 TensorFlow 构建模型

python复制代码import tensorflow as tf# 创建一个简单的深度学习模型
model = tf.keras.models.Sequential([tf.keras.layers.Dense(128, activation='relu'),tf.keras.layers.Dense(64, activation='relu'),tf.keras.layers.Dense(10, activation='softmax')
])# 编译模型
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])# 打印模型结构
model.summary()

9. 应用案例

图像分类:

深度学习在图像分类中广泛应用。以下是使用 Keras 进行图像分类的代码。

示例代码:简单的图像分类网络

python复制代码from keras.datasets import mnist
from keras.utils import to_categorical# 加载 MNIST 数据集
(X_train, y_train), (X_test, y_test) = mnist.load_data()# 数据预处理
X_train = X_train.reshape((X_train.shape[0], 28 * 28)).astype('float32') / 255
X_test = X_test.reshape((X_test.shape[0], 28 * 28)).astype('float32') / 255
y_train = to_categorical(y_train)
y_test = to_categorical(y_test)# 构建模型
model = Sequential()
model.add(Dense(512, activation='relu', input_shape=(28 * 28,)))
model.add(Dense(10, activation='softmax'))# 编译模型
model.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['accuracy'])# 训练模型
model.fit(X_train, y_train, epochs=5, batch_size=128, verbose=1)# 评估模型
test_loss, test_acc = model.evaluate(X_test, y_test)
print(f"测试准确率: {test_acc}")

10. 总结与未来展望

通过本文,我们从基础开始理解了神经网络与深度学习的核心概念。随着计算能力的提升和算法的改进,深度学习的未来前景广阔。未来,我们可以期待深度学习在更多领域取得突破,尤其是在医疗、金融和自动驾驶等领域。

11. 参考资料

  • 《Deep Learning》 by Ian Goodfellow
  • Coursera 深度学习课程
  • TensorFlow 官方文档

12.使用机器学习分析CSDN热榜

image-20240906101013147

  • 吃枣药丸
    img

你好,我是Qiuner. 为帮助别人少走弯路而写博客 这是我的 github https://github.com/Qiuner⭐ gitee https://gitee.com/Qiuner 🌹

如果本篇文章帮到了你 不妨点个吧~ 我会很高兴的 😄 (^ ~ ^) 。想看更多 那就点个关注吧 我会尽力带来有趣的内容 😎。

代码都在github或gitee上,如有需要可以去上面自行下载。记得给我点星星哦

承接毕设辅导,代码开发等

如果你遇到了问题,自己没法解决,可以去我掘金评论区问。私信看不完,CSDN评论区可能会漏看 掘金账号 https://juejin.cn/user/1942157160101860 掘金账号

更多专栏:
  • 📊 一图读懂系列

  • 📝 一文读懂系列

  • ⚽ Uniapp

  • 🌟 持续更新

  • 🤩 Vue项目实战

  • 🚀 JavaWeb

  • 🎨 设计模式

  • 📡 计算机网络

  • 🎯 人生经验

  • 🔍 软件测试

掘金账号 CSDN账号

感谢订阅专栏 三连文章

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 十款闭源加密软件推荐:哪款才是最佳选择
  • Spring2-入门
  • 流片为啥那么重要?
  • SpringMVC;MVC模式;Spring环境搭建;
  • 【万象AI,安全新生】美洽献力2024国家网络安全宣传周-成都站
  • Vue3+TS项目pinia使用优化在stores目录下新建index.ts
  • String,StringBuffer ,StringBuilder 的区别及其详解
  • 【验证问题记录-001】后仿中无复位寄存器的初始化问题
  • TypeScript接口
  • C#环境搭建和入门教程--vs2022之下
  • shell脚本之双重循环(详解)
  • 批量插入insert到SQLServer数据库,BigDecimal精度丢失解决办法,不动代码,从驱动层面解决
  • 《机器学习》—— PCA降维
  • ios xib 子控件约束置灰不能添加约束
  • 我发的共同一作,到底有没有用?
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • 10个最佳ES6特性 ES7与ES8的特性
  • eclipse(luna)创建web工程
  • LeetCode18.四数之和 JavaScript
  • Markdown 语法简单说明
  • mysql 5.6 原生Online DDL解析
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • RxJS: 简单入门
  • 简析gRPC client 连接管理
  • 利用DataURL技术在网页上显示图片
  • 我的zsh配置, 2019最新方案
  • 再谈express与koa的对比
  • 在electron中实现跨域请求,无需更改服务器端设置
  • 7行Python代码的人脸识别
  • C# - 为值类型重定义相等性
  • 组复制官方翻译九、Group Replication Technical Details
  • ​io --- 处理流的核心工具​
  • !! 2.对十份论文和报告中的关于OpenCV和Android NDK开发的总结
  • (10)Linux冯诺依曼结构操作系统的再次理解
  • (4)logging(日志模块)
  • (9)YOLO-Pose:使用对象关键点相似性损失增强多人姿态估计的增强版YOLO
  • (二)JAVA使用POI操作excel
  • (规划)24届春招和25届暑假实习路线准备规划
  • (实测可用)(3)Git的使用——RT Thread Stdio添加的软件包,github与gitee冲突造成无法上传文件到gitee
  • (四)Tiki-taka算法(TTA)求解无人机三维路径规划研究(MATLAB)
  • (转)Sublime Text3配置Lua运行环境
  • (转载)VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)
  • ****Linux下Mysql的安装和配置
  • .dwp和.webpart的区别
  • .NET 8 中引入新的 IHostedLifecycleService 接口 实现定时任务
  • .net core 调用c dll_用C++生成一个简单的DLL文件VS2008
  • .net 怎么循环得到数组里的值_关于js数组
  • .NET 中选择合适的文件打开模式(CreateNew, Create, Open, OpenOrCreate, Truncate, Append)
  • .NET/C# 在 64 位进程中读取 32 位进程重定向后的注册表
  • .NET/C# 中你可以在代码中写多个 Main 函数,然后按需要随时切换
  • .Net+SQL Server企业应用性能优化笔记4——精确查找瓶颈
  • @cacheable 是否缓存成功_让我们来学习学习SpringCache分布式缓存,为什么用?
  • [.net] 如何在mail的加入正文显示图片
  • []AT 指令 收发短信和GPRS上网 SIM508/548
  • [023-2].第2节:SpringBoot中接收参数相关注解