深度学习入门--基于Python的理论与实现--Python入门

第一章 Python入门

1.1 Python是什么

Python 是一种高级编程语言,由 Guido van Rossum 于 1989 年创建,并在 1991 年正式发布。Python 具有以下特点:

  • 易读易写:Python 语法简洁,代码可读性强,使开发者能够更专注于问题本身。

  • 跨平台:Python 可以在 Windows、Linux 和 macOS 上运行,具有良好的可移植性。

  • 丰富的库:Python 生态系统中包含大量的第三方库,如 NumPy、Pandas、Matplotlib 等,使得开发者可以快速构建应用程序。

  • 动态类型:Python 是一种动态类型语言,不需要声明变量类型,运行时自动推断数据类型。

📌Python和C/C++区别?​
C/C++为静态语言,这意味着编码时须声明变量类型,然后由编译器编译成机器码运行。

Python为动态语言,编码时无需声明变量类型,由解释器逐句将代码解释成机器码运行。

  • 广泛应用:Python 被广泛应用于 Web 开发、数据分析、人工智能、深度学习等领域。

📌 ​​为什么选择Python做深度学习?​
相比C++/Java,Python语法简洁,代码可读性强,开发效率高,且主流深度学习框架(如TensorFlow、Pytorch)优先提供Python接口。

1.2 Python的安装

在学习 Python 之前,我们需要先安装 Python 解释器。

1.2.1 python版本

目前,Python 有两个主要版本:Python 2 和 Python 3。Python 2 已经停止维护,因此建议使用 Python 3 进行开发。

可以在 Python 官网 下载适合自己操作系统的 Python 版本。安装完成后,可以通过以下命令检查 Python 版本:

python --version  # 或者
python3 --version

1.2.2 外部库

Python 自带了一些标准库,但在深度学习或其他开发应用中,我们通常需要安装一些第三方库,如 NumPy、Matplotlib、Pandas 等。可以使用 pip(Python 的包管理工具)来安装这些库,例如:

pip install numpy matplotlib pandas

📌 ​​tips​
或许你无法使用pip进行直接下载,此时你可以使用镜像源进行下载,例如使用清华源

pip install some-package -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple 

#将some-pakage替换成你想要下载的库即可

1.2.3 Anaconda

为了更好地控制Python版本及环境包,我们需要使用到Anaconda,这是一个包含 Python 及其常用数据科学库的发行版。Anaconda 适用于机器学习和深度学习开发,提供了更便捷的环境管理工具 conda

📌 ​​tips​
如果你想要使用轻量级管理,可以考虑使用Miniconda(Miniconda下载)

可以在 Anaconda 官网 下载 Anaconda,并通过以下命令检查是否安装成功:

conda --version

1.3 Python解释器

Python 解释器可以直接执行 Python 代码,例如,在终端或命令行输入以下代码:

print("Hello, Python!")

1.3.1 算术计算

Python 可以像计算器一样执行算术运算,例如:

print(3 + 5)   # 加法
print(10 - 4)  # 减法
print(6 * 7)   # 乘法
print(8 / 2)   # 除法
print(9 // 2)  # 整数除法
print(2 ** 3)  # 幂运算

1.3.2 数据类型

Python 具有多种内置数据类型,包括整数(int)、浮点数(float)、字符串(str)、布尔型(bool)等。例如:

x = 10        # 整数
y = 3.14      # 浮点数
z = "Python"  # 字符串
z = 'python'  # 字符串
b = True      # 布尔值

1.3.3 变量

Python 变量不需要显式声明类型,直接赋值即可:

name = "Alice"
age = 25
print(name, age)

1.3.4 列表

列表(list)是 Python 中常用的数据结构,可以存储多个元素,并支持索引访问:

numbers = [1, 2, 3, 4, 5]
print(numbers[0])  # 访问第一个元素
numbers.append(6)  # 添加元素
print(numbers)

1.3.5 字典

字典(dict)用于存储键值对,例如:

person = {"name": "Alice", "age": 25}
print(person["name"])

1.3.6 布尔型

布尔型用于逻辑判断:

print(5 > 3)  # 输出 True
print(2 == 4)  # 输出 False

1.3.7 if语句

Python 使用 if 语句进行条件判断:

x = 10
if x > 5:
    print("x 大于 5")
else:
    print("x 小于等于 5")

1.3.8 for语句

for 循环用于遍历列表等可迭代对象:

for i in range(5):
    print(i)

1.3.9 函数

Python 使用 def 关键字定义函数:

def add(a, b):
    return a + b

print(add(3, 5))

1.4 Python脚本文件

1.4.1 保存为文件

虽然可以直接在python解释器下编写程序运行,但是那样会些许麻烦,所以可以将 Python 代码保存为 .py 文件,例如 script.py,然后使用以下命令运行:

# 训练脚本示例
import numpy as np

def train_model():
    print("Training started...")

if __name__ == '__main__':
    train_model()
python script.py

1.4.2 类

Python 支持面向对象编程,可以使用 class 定义类:

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def greet(self):
        print(f"Hello, my name is {self.name}.")

p = Person("Alice", 25)
p.greet()

1.5 NumPy

NumPy 是 Python 中用于科学计算的库,提供了高效的多维数组操作。

1.5.1 导入NumPy

import numpy as np

1.5.2 生成NumPy数组

a = np.array([1, 2, 3])  # 一维数组
b = np.zeros((3, 3))     # 3x3零矩阵
c = np.arange(10)        # 类似range(10)

1.5.3 NumPy的算术运算

a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
print(a + b)  # 逐元素加法 → [5, 7, 9]    减法同理,可自行尝试

x = np.array([1, 2, 3])
y = np.array([4, 5, 6])
print(x * y)  # 逐元素乘法 → [4, 10, 18]    除法同理,可自行尝试

1.5.4 NumPy的N维数组

matrix = np.array([[1, 2], [3, 4]])
print(matrix.shape)  # 输出维度 → (2, 2)

1.5.5 广播

a = np.array([[1], [2], [3]])
b = np.array([10, 20])
print(a + b)  # 广播相加 → [[11,21], [12,22], [13,23]]

1.5.6 访问元素

arr = np.array([[1, 2, 3], [4, 5, 6]])
print(arr[1, 2])   # 第2行第3列 → 6
print(arr[:, 1:3]) # 所有行的2-3列 → [[2,3], [5,6]]

1.6 Matplotlib

1.6.1 绘制简单图形

import matplotlib.pyplot as plt

x = np.linspace(0, 2*np.pi, 100)
y = np.sin(x)
plt.plot(x, y)
plt.title("Sine Wave")
plt.show()

1.6.2 pyplot的功能

# 多子图绘制
plt.subplot(1, 2, 1)  # 1行2列的第1个
plt.plot(x, np.sin(x))

plt.subplot(1, 2, 2)
plt.plot(x, np.cos(x))
plt.show()

1.6.3 显示图像

from PIL import Image
img = np.array(Image.open('cat.jpg'))
plt.imshow(img)
plt.axis('off')  # 隐藏坐标轴
plt.show()

1.7 小结

本章介绍了 Python 的基础知识,包括 Python 的安装、基本语法、控制结构、数据类型、面向对象编程,以及 NumPy 和 Matplotlib 的基本使用。在掌握这些内容后,我们可以进一步学习深度学习相关的内容。

知识点关键用途
Python基础控制流程、函数定义
NumPy张量操作、广播机制
Matplotlib损失曲线可视化、数据分布展示

在接下来的系列中,我将手把手带你从零实现神经网络——仅用Python和NumPy,无需任何框架依赖。我们将像拆解时钟一样,逐层剖析这个'神秘'的算法:从最简单的感知机开始,一步步实现前向传播、反向传播,最终搭建出一个能识别手写数字的完整神经网络。你会发现,深度学习的核心原理,原来如此直观而美妙!

### 关于《深度学习入门:基于Python理论实现》中的MNIST数据集 #### MNIST 数据集简介 MNIST 是一个手写数字识别的数据集,包含 70,000 张灰度图像,每张图像是 28×28 的像素大小,分为 10 类(0 到 9)。该数据集被广泛用于机器学习和深度学习领域作为初学者的学习材料。 在《深度学习入门:基于Python理论实现》这本书中,MNIST 数据集首次出现在第三章,并贯穿后续多个章节。书本通过 MNIST 数据集讲解如何构建简单的神经网络模型并完成分类任务[^1]。 --- #### 下载 MNIST 数据集遇到的问题及解决办法 由于 MNIST 数据集默认从国外服务器下载,在国内访问可能会出现超时或连接失败的情况。为了顺利获取数据集,可以采取以下几种方式: 1. **手动下载并指定本地路径** 手动从其他镜像站点下载 MNIST 数据集文件(通常为 `.gz` 格式的压缩包),并将它们放置到代码运行目录下对应的子文件夹中。具体操作如下: - 访问 [MNIST 官方网站](http://yann.lecun.com/exdb/mnist/) 或者寻找国内镜像资源。 - 将 `train-images-idx3-ubyte.gz`, `train-labels-idx1-ubyte.gz`, `t10k-images-idx3-ubyte.gz`, 和 `t10k-labels-idx1-ubyte.gz` 文件解压后存放到项目根目录下的 `data/` 子文件夹中。 - 修改加载数据的脚本逻辑,使其优先尝试读取本地存储的数据而非远程地址[^4]。 2. **修改源码中的 URL 地址** 如果希望继续沿用原生代码结构,则可以通过替换内置的下载链接来解决问题。例如,将官方提供的外网地址更换成阿里云或其他支持加速服务的镜像版本。以下是调整后的部分 Python 实现片段: ```python import urllib.request from pathlib import Path def download_mnist(url="https://mirrors.aliyun.com/", save_path="./data"): file_names = [ "train-images-idx3-ubyte.gz", "train-labels-idx1-ubyte.gz", "t10k-images-idx3-ubyte.gz", "t10k-labels-idx1-ubyte.gz" ] data_dir = Path(save_path) data_dir.mkdir(parents=True, exist_ok=True) for fname in file_names: full_url = url + fname local_file = data_dir / fname if not local_file.exists(): print(f"Downloading {fname}...") urllib.request.urlretrieve(full_url, str(local_file)) else: print(f"{fname} already exists.") ``` 上述代码展示了如何利用阿里云镜像快速拉取所需资料的同时保持原有框架不变。 --- #### 使用教程概述 按照书籍指导流程搭建基础环境之后,即可着手实践 MNIST 数据集上的应用案例。主要步骤包括但不限于以下几个方面: 1. 加载数据集并通过预处理转换为适合输入的形式; 2. 构建单层或多层感知机模型架构; 3. 配置损失函数以及优化算法参数设置; 4. 启动训练过程直至收敛或者达到预期性能指标为止;最后评估测试样本表现情况得出结论。 其中特别需要注意的是正则化技术的应用时机及其影响效果分析等内容均会在相应阶段有所体现[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值