1. Matplotlib库并不是只能静态绘图。默认情况下,Matplotlib 处于阻塞模式(Non-interactive Mode),即调用 plt.plot() 后,必须手动关闭窗口后才能继续执行代码。而 plt.ion() 开启交互模式后,plt.plot() 会直接更新当前图表,代码无需等待窗口关闭即可继续执行,支持动态、实时绘图。
示例:
import matplotlib.pyplot as plt
import numpy as np
plt.ion() # 开启交互模式
X = np.linspace(0, 10, 100) # 生成0到3之间的100个点
Y = np.sin(X) # 计算每个点的正弦值 # 设置y轴范围
for i in range(100):
plt.ylim(-1.5, 1.5) # 动态更新y轴范围
plt.plot(X,Y * np.sin(i*0.1)) # 动态更新图表
plt.pause(0.1) # 暂停0.1秒,给时间显示更新;若无 pause,可能看不到中间过程
plt.clf() # 清空图表,为下一次更新做准备
plt.ioff() # 关闭交互模式(可选,恢复阻塞行为)
plt.show() # 最后显示最终图表(非阻塞,仅展示)
2. torchvision.datasets的transform是在__getitem__时对data应用,处理数据时要注意隐式逻辑
3. if __name__ == '__main__'会让 IDE 将程序识别为 “独立进程”, 这种识别会影响 IDE 的进程管理策略。
- 没有if __name__ == '__main__':时:
IDE 可能将程序识别为 “交互式执行的代码”(类似在 Python 控制台逐行输入代码),或 “非独立模块的代码片段”。
部分 IDE(尤其是调试模式下)为了方便用户随时中断、查看变量,会将程序与 IDE 的 “主线程” 绑定 —— 当你切到后台(IDE 窗口失去焦点),IDE 可能会暂时 “挂起” 这个绑定的线程以节省资源,或为了避免后台运行时用户无法及时响应调试操作(比如断点),从而表现为 “程序暂停”。 - 有if __name__ == '__main__':时:
当主逻辑被包裹在这个条件下,IDE 会明确识别出 “这是一个独立运行的脚本”,并为其启动一个独立的 Python 进程(而非绑定到 IDE 的主线程)。
独立进程的运行不受 IDE 窗口焦点的影响 —— 即使你切到后台,操作系统会按正常进程调度规则继续执行该进程(除非系统资源极度紧张),因此程序会继续运行。
if __name__ == '__main__':的作用是让 IDE 将程序识别为 “独立进程”,而非 “绑定到 IDE 的交互式代码”,从而避免了 IDE 因 “焦点切换” 而暂停程序的行为。这在训练模型时也许会节省大量的时间。
4. 选择
数量的神经网络层宽度能提高计算效率。计算机通过地址总线对内存进行线性寻址,当层的宽度是 2 的幂次方时,在计算内存地址偏移量等操作上可以利用二进制的特性进行高效计算,契合了内存按块分配、满足对齐要求。
1823

被折叠的 条评论
为什么被折叠?



