你要是现在打开技术讨论区大概率会看到一种论调TensorFlow 已经凉了学它不如学 PyTorch。我在 2024 年还选择把 TensorFlow 写进生产环境不是因为我守旧而是因为我把模型从开发环境推到线上那条路走了太多次知道哪条路最省心。TensorFlow 的学习曲线确实不友好安装也容易翻车但它解决的从来都不是谁比较好发论文这个问题而是谁更适合把模型变成稳定服务这个问题。这篇内容我打算从安装、跑通第一个模型、到和 PyTorch 的 2024 年选型对比把我踩过的坑和现在还在用的习惯一次性讲清楚适合正准备装 TensorFlow、被 GPU 环境折腾到想砸电脑、或者在两个框架之间反复摇摆的人。先说结论TensorFlow 没有死只是它和你想象中的样子可能不太一样。1. 2024年了TensorFlow 到底还行不行1.1 一个反直觉的现实研究圈退烧工业界没退场这几年你翻顶会论文的代码仓库用 PyTorch 的比例确实肉眼可见地高学术圈里 TensorFlow 的存在感在下降这个是事实没必要洗。但论文代码量和生产环境部署量是两码事。你去看看安卓端的应用TFLite 依然是移动端推理的主力选项之一你去看看云平台上的托管推理服务TensorFlow Serving 从 2016 年到现在一直在跑再去看看那些对稳定性要求极高的银行、制造、零售系统里面存量的大批 TF 模型不是一句换框架就能迁移走的。我自己的体感是TensorFlow 更像是一个训练加部署一体化的工厂。它的研究体验确实不如 PyTorch 灵活但一旦模型要落地它会给你一套相对完整的流水线训练完直接导出 SavedModelTensorFlow Serving 接上就能起服务TFLite 可以量化压缩后塞进手机TF.js 还能在浏览器里跑。这一套链路 PyTorch 也有但大多是靠 ONNX、TorchServe 这些外围组件拼出来的拼得好不好取决于你的工程能力。所以 2024 年的局面并不是TensorFlow 死了而是它退回了自己最擅长的领域工业落地和跨平台部署。1.2 学 TF 先忘掉 1.x2.x 时代的 Keras 才是本体很多劝退 TensorFlow 的人还在拿 1.x 时代的经验说事。什么 session、placeholder、graph 模式听着就头大。但 TensorFlow 2.x 从设计上把这些问题基本解决了默认开启 Eager Execution也就是你写 Python 的时候每一行计算立刻返回结果不需要先构建图再跑会话。同时官方把 Keras 收编为tf.keras作为推荐的高级 API你甚至可以完全不用接触底层那些晦涩的算子像搭积木一样把模型搭出来。我见过一些新手抱着 TensorFlow 1.x 的老教程学结果第一周就被劝退了。其实 2024 年开始学 TF正确的打开方式是直接从tf.keras入手先学 Sequential 模型再学 Functional API。Functional API 是 Keras 里被严重低估的一个模块多输入、多输出、共享层这种复杂的模型结构用函数式写法反而比 PyTorch 手写 forward 更清晰。等真到了需要自定义训练逻辑的那一步再去碰tf.GradientTape再到tf.function做加速层层递进。学习路径对了TensorFlow 的入门难度没有传说中那么夸张。1.3 谁适合把 TensorFlow 当主力框架我根据自己的实际项目经验把适合用 TF 的人和不适合用 TF 的人分成两类。适合的人通常有这些特征第一你的模型最终要走服务端部署要写 Python 服务或者 C 服务那 TF 的导出和推理生态能省掉你很多事第二你要做移动端或者嵌入式端的模型TF Lite 在安卓上的成熟度暂时还是最好的第三你所在的公司有存量 TF 代码很多大厂的推荐系统、风控系统都是 TF 写的进去之后根本没得选与其抱怨不如把 TF 吃透第四你打算用 TPU 训练那不用 TF 几乎没法玩TPU 和 PyTorch 的适配虽然一直在推进但 TF 依然是第一公民。不适合的人也很明确如果你是一个在校研究生主要目标是快速验证新 idea并且要复现最近半年的顶会论文那 PyTorch 的生态确实更友好因为大部分论文源码都是 PyTorch 写的你用 TF 复现等于给自己加难度。但注意这说的是研究阶段不适合不是TF 这个工具垃圾。工具只有合不合适没有绝对的好坏。2. TensorFlow安装版本、GPU、环境每一步都可能翻车2.1 先看两件事再动手Python 版本和虚拟环境安装 TensorFlow 最直接的命令是pip install tensorflow但我不建议你在系统 Python 里裸装。你机器上大概率已经有别的项目依赖TensorFlow 的依赖涉及numpy、protobuf、absl-py这一大堆版本一冲突就是灾难。我在实际工作中遇到最难恢复的环境问题十有八九都是因为当初图省事没开虚拟环境。推荐做法是先用 conda 或者 venv 新建一个独立环境然后确认 Python 版本。以我自己的习惯来说Python 3.10 或 3.11 在 TF 生态里最稳妥3.12 也能用但某些附属工具可能还没跟上3.13 这种太新的版本除非你已经确认所有依赖都支持否则别轻易尝试。下面是一套参考流程conda create -n tf python3.10 -y conda activate tf pip install --upgrade pip pip install tensorflow python -c import tensorflow as tf; print(tf.__version__)最后一行如果能正常打印版本号CPU 版就装好了。这时候你可以顺手跑一个tf.config.list_physical_devices(CPU)确认一下。装完之后我强烈建议你立刻把这个环境的依赖导出保存因为后续模型跑起来之后环境再想重建靠脑子记版本是记不住的。2.2 GPU 版的门槛不是 pip是 CUDA 和 cuDNN很多人卡在 GPU 版 TensorFlow不是卡在安装命令而是卡在 CUDA 和 cuDNN 的版本匹配。TensorFlow 对 CUDA 和 cuDNN 是有明确版本要求的装错了不是提示你版本不对而是运行时报一堆底层错误比如找不到libcudart.so或者干脆直接段错误。我最开始接触 GPU 版 TF 时在这上面浪费了整整一个周末。TensorFlow 2.10 是一个分水岭它是最后一个在 Windows 原生支持 GPU 的版本。从 2.11 开始你在 Windows 上用 GPU官方推荐走 WSL2换句话说Windows 下的 GPU 训练体验变成了在 Linux 里跑。如果你用的是 Linux 服务器那直接很多如果你用的是 Windows 电脑我建议优先考虑 WSL2别在 Windows 原生环境里硬刚不然你会被各种动态链接库的问题折磨到怀疑人生。以下是基于官方文档的 TF 与 CUDA 大致匹配关系直接操作时以官方表格为准TensorFlow 版本CUDA 版本cuDNN 版本备注2.1011.28.1Windows 原生 GPU 最后支持版本2.12 - 2.1311.88.6Linux 下较稳定2.15 - 2.1612.28.9较新版本推荐配套驱动 525一个好消息是从 TF 2.11 开始pip 会自动拉取一部分 NVIDIA 的依赖包比如nvidia-cuda-runtime、nvidia-cudnn这些不需要你手动去官网下载 CUDA Toolkit 再配置环境变量。这确实降低了门槛但也造成了一个隐形膨胀虚拟环境里会多出几个 GB 的包。另一个坏消息是如果你的 GPU 驱动版本太老即便 pip 把 CUDA 相关的库装好了驱动不认你也没办法所以第一步永远是确认驱动够新nvidia-smi能正常输出。2.3 三个最常见安装错误直接对号入座我把这几年在群里看到的、以及自己遇到的安装错误归纳成三类基本上能覆盖九成的情况。第一类错误ModuleNotFoundError: No module named tensorflow。绝大多数情况不是没装而是你安装的虚拟环境和运行脚本的虚拟环境不是同一个。你在终端里conda activate tf之后确认一下which python指向的是不是 tf 环境里的解释器通常这一查问题就清楚了。第二类错误Could not find libcuda.so或者libcudnn.so相关报错。如果你是在容器里跑那大概率是宿主机的 NVIDIA 驱动没有映射到容器里需要在docker run的时候加--gpus all如果你是在 WSL2 里跑需要先确认 Windows 侧安装了支持 WSL 的 NVIDIA 驱动而不是只装了 Linux 侧的驱动。这一类的关键排查思路是先确认nvidia-smi能跑通再让 TensorFlow 去调用 GPU。第三类错误安装时提示tensorflow找不到匹配版本。这种大概率是 Python 版本太新或者太老TensorFlow 的 pip 包没有对应的 wheel。检查 Python 版本退回到 3.10 或 3.11 基本就能解决。提示装 GPU 版之前先跑nvidia-smi看一眼驱动版本。驱动是地基地基本来就有问题后面装什么都白搭。3. 从零跑通一个TensorFlow模型不是模型难是链条长3.1 别一上来就 MNIST用结构化数据走通全流程更值市面上的 TensorFlow 教程十个有八个拿 MNIST 手写数字识别开头。不是说不行而是 MNIST 太顺了数据是内置的图像尺寸是统一的模型不会过拟合到离谱。实际工作里你遇到更多的是表格数据比如判断用户会不会流失、交易有没有风险特征是几百列、数据有缺失、数值量纲还不一样。我建议你自己从结构化数据开始跑通全流程这样更接近真实场景。下面是我经常会用的一段代码骨架用 Keras 搭一个二分类模型。数据我用 sklearn 的make_classification生成纯粹演示链路import numpy as np import tensorflow as tf from sklearn.datasets import make_classification from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler X, y make_classification(n_samples10000, n_features20, random_state42) X_train, X_val, y_train, y_val train_test_split(X, y, test_size0.2, random_state42) scaler StandardScaler() X_train scaler.fit_transform(X_train) X_val scaler.transform(X_val) model tf.keras.Sequential([ tf.keras.layers.Input(shape(X_train.shape[1],)), tf.keras.layers.Dense(128, activationrelu), tf.keras.layers.BatchNormalization(), tf.keras.layers.Dropout(0.3), tf.keras.layers.Dense(64, activationrelu), tf.keras.layers.Dropout(0.3), tf.keras.layers.Dense(1, activationsigmoid) ]) model.compile( optimizertf.keras.optimizers.Adam(learning_rate1e-3), lossbinary_crossentropy, metrics[accuracy] ) history model.fit( X_train, y_train, validation_data(X_val, y_val), epochs30, batch_size256, verbose1 )这段代码里有两个我特别推荐的细节。第一个是BatchNormalization它能加速收敛还能对深层网络起到一定的稳定作用第二个是Dropout在表格数据上它是防过拟合最直接的手段之一。你不需要一开始就把网络搭得多花哨先把训不训得动、过不过拟合这条线摸清楚之后再逐步加复杂度。3.2 训练时盯住三个数字loss、val_loss、显存占用很多新手训练的时候只看 accuracy这是不对的。分类准确率在样本不均衡的时候会骗人而loss是模型优化过程中最诚实的信号。我训练时最关注的是val_loss也就是验证集上的损失。如果train_loss一直降、val_loss不降反升说明模型开始过拟合了这时候Dropout、正则化、或者减少训练轮次都是思路。为了不让训练过程失控我会在model.fit里加三个回调这三件套我已经用了很多年callbacks [ tf.keras.callbacks.EarlyStopping(monitorval_loss, patience5, restore_best_weightsTrue), tf.keras.callbacks.ReduceLROnPlateau(monitorval_loss, factor0.5, patience3), tf.keras.callbacks.ModelCheckpoint(best_model.keras, monitorval_loss, save_best_onlyTrue) ] history model.fit( X_train, y_train, validation_data(X_val, y_val), epochs100, batch_size256, callbackscallbacks )EarlyStopping的作用是当val_loss连续若干个 epoch 不再下降时就自动停止避免在过拟合上继续浪费时间ReduceLROnPlateau是在 loss 进入平台期时自动把学习率减半给模型一个微调的机会ModelCheckpoint则保证每一轮的最优权重都会落盘。有了这三个回调你甚至可以大着胆子把epochs设成 100反正不会真的傻乎乎跑满 100 轮。至于显存GPU 版的用户可以养成熟练的nvidia-smi习惯或者写一行tf.config.list_physical_devices(GPU)确认 TensorFlow 有没有真的拿到 GPU。我见过很多以为是 GPU 训练实际上跑在 CPU 上的情况折腾半天速度上不来结果发现是 CUDA 配置出了问题TensorFlow 自动回退到 CPU 了。3.3 训练完不等于结束导出与部署才是 TF 的主场模型训练好之后你一定会遇到怎么把模型给别人用这个问题。PyTorch 的常见路径是存.pt或者.pth权重文件然后部署时要么用 Python 重新定义模型结构再加载权重要么导出 ONNX 交给别的推理引擎。TensorFlow 这边的做法要简单直接一些用model.save(my_model_dir)导出整个SavedModel文件夹里面包含了模型结构、权重、以及 serving 相关的配置。model.save(my_model_dir) # 加载方式 loaded_model tf.keras.models.load_model(my_model_dir) loaded_model.predict(X_val[:5])SavedModel是 TensorFlow 跨平台部署的基础。之后你如果想要上线一个 HTTP 推理服务官方推荐 TensorFlow Serving把 SavedModel 目录挂进去就能启动如果想要挪到手机端用 TFLite Converter 转成.tflite文件体积还能压掉一大截。这一条链路的完整度是 TensorFlow 在 2024 年依然不可替代的核心原因之一。对一个业务工程师来说模型训练完只是开端能不能顺利交给运维跑起来才是真正决定产出价值的环节。4. TensorFlow 与 PyTorch 的 2024 选型避坑指南4.1 本质差异一体化工厂 vs 研究工作台我越来越觉得TensorFlow 和 PyTorch 的差异不只在 API 风格上而在它们想解决的问题上。TensorFlow 从出生那天起就是奔着从训练到部署的整个流水线去的所以它会把 SavedModel、服务化、移动端推理这些最后一个公里的问题纳入设计。PyTorch 最初是研究导向的它追求的是我脑子里有个新想法能用最小的代价把它跑起来因此它的调试体验、代码可读性、动态图灵活性都做得很好。这也解释了为什么大家总觉得 PyTorch 社区更活跃。研究与学术圈的人天然喜欢快速迭代PyTorch 的表达方式让他们舒服而工业界的人喜欢稳定和可维护性TensorFlow 的工程化沉淀让他们安心。两边各有各的忠实用户争论谁更好其实是在拿自己的需求去套别人的场景。4.2 一张表看懂关键决策项真正决定选型的是你项目的具体约束。下面这张表是我自己整理的关键决策项不是那种放之四海而皆准的工业界 vs 学术界空话而是我实际对比过的维度决策项TensorFlowPyTorch模型研究与快速迭代中等能用但不够丝滑优秀调试直观探索成本低服务端部署TensorFlow Serving 成熟稳定TorchServe 在成长但周边生态相对年轻移动端/嵌入式TFLite 覆盖面广安卓生态好有 PyTorch Mobile整体成熟度略低TPU/专用硬件第一公民支持支持有推进但学习使用成本更高模型可视化TensorBoard 功能全面TensorBoard 也能用集成度稍弱学习曲线偏陡但 2.x Keras 后明显变缓更平缓接近 PyTorch 论文代码风格社区活跃度稳定但热度下滑研究方法论层面明显更活跃存量代码迁移成本迁移到 PyTorch 成本高迁移到 TF 同样不低这张表里最容易被忽略的一个点就是移动端。如果你做的产品最终要跑到手机上去TF Lite 的可行性验证我已经做过太多次从模型转换到量化再到安卓集成文档齐全坑基本都被踩平了。PyTorch Mobile 并不是不行但在端侧模型部署的场景里你更容易在社区里找到 TF Lite 的案例。4.3 我的选择建议别只看好不好要看你的第一公里和最后一公里我给自己总结过一个简单粗暴的选型判断框架看你的第一公里是什么最后一公里是什么。所谓第一公里就是你从零开始实现模型、做实验的过程这个过程 PyTorch 通常让人觉得更舒服所谓最后一公里就是模型训练完之后要交付、要上线、要跨平台运行的过程这个过程 TensorFlow 的配套更完整。如果你的工作场景是快速验证想法、写论文、复现 SOTA那就是以第一公里为核心选 PyTorch 完全合理不用因为我说 TensorFlow 好就觉得难受。如果你的工作场景是把模型做成线上服务或者跑在手机端那选 TensorFlow 会更省心。如果公司已经有一套 TF 的存量系统那更别带头搞技术移民你新起的项目用 PyTorch、老的项目用 TF中间维护两套部署链路的成本会迅速淹没你所谓的新框架优势。2024 年还有一个趋势是两边都在互相学习。PyTorch 在加强导出和部署能力TensorFlow 则在优化动态图和使用体验。与其纠结站队不如两个都了解真正把其中一个用透另一个遇到的时候能看懂代码就行。我自己的日常是主力用 TensorFlow 跑生产链路但遇到特别新的模型结构我会先用 PyTorch 快速验证效果验证通过了再迁移回 TF 的工程链路。这种组合方式比单纯押宝某个框架要舒服很多。5. 我的TensorFlow实操经验五个少有人写但很实用的坑5.1 tf.data 的性能比你想象的更敏感用 TensorFlow 训练时数据读取往往是最容易被忽略的瓶颈。很多人直接喂 NumPy 数组给model.fit小数据量没问题数据一上百 GB训练速度就会被数据读取拖死。正确姿势是用tf.data.Dataset管理输入管道然后加上prefetch和cache。dataset tf.data.Dataset.from_tensor_slices((X_train, y_train)) dataset dataset.shuffle(buffer_size1024).batch(256).prefetch(tf.data.AUTOTUNE)prefetch(tf.data.AUTOTUNE)的意思是让数据预取和模型训练在时间上重叠通俗点讲就是在 GPU 算这批数据的时候CPU 已经提前把下一批数据准备好了。就这一行代码在我曾经的某个训练任务里吞吐量提升了将近三成。cache则适合数据总量能塞进内存的情况把数据集缓存到内存里后续每个 epoch 不用重复读磁盘。这属于一行代码换一倍速度的典型优化但少有人在一开始就告诉你。5.2 模型不会老环境会老这是我在维护旧项目时最大的感悟。你一年前导出的 SavedModel今天重新加载不一定能跑起来问题往往不在模型本身而在 TensorFlow 版本变了算子实现变了或者依赖的某些底层库不兼容了。所以我的第一个建议是每次训练结束、模型上线立即把运行时环境完整地记录到文件里除了pip freeze还要记 CUDA 和 cuDNN 的版本。我处理过几次模型在开发机没问题到生产服务器就报错的情况最后定位都是环境不一致。要么是生产服务器的 TensorFlow 版本旧要么是缺了某个系统库。后来我强制自己写部署文档时必须包含一段环境清单包含 Python 版本、TensorFlow 版本、CUDA 版本、GPU 驱动版本、操作系统版本缺一不可。这个习惯救我很多次比任何花哨的工具都管用。5.3 GPU 利用率上不去的排查顺序当你发现训练速度远低于预期第一反应不要是换更大的显卡而是按顺序排查下面几个地方确认 TensorFlow 真的看到了 GPU用tf.config.list_physical_devices(GPU)没有输出就是没识别到。确认没有发生 CPU 回退看训练日志里有没有出现CPU相关字样或者运行中观察任务管理器/系统监视器。确认数据读取不是瓶颈给model.fit加prefetch或者在数据管道里用AUTOTUNE。确认batch_size是否合理如果 batch_size 太小GPU 的计算单元喂不满利用率自然上不去太大又容易 OOM需要找到一个平衡点。确认模型本身的计算量有些小模型在 GPU 上的启动开销反而超过了计算收益这时候用 GPU 未必比 CPU 快。这个顺序我基本是固定的从上到下排查九成问题都能解决。直接盯着nvidia-smi看显存使用率其实参考意义有限显存占用高不代表算力利用充分很多模型是显存吃得饱算力用不满。5.4 GPU 显存管理别让一个程序吃光整张卡TensorFlow 默认会在拿到 GPU 后预占大量显存这在单机多任务的环境下很烦人。我自己以前跑一个测试脚本直接把整张卡显存吃满其他同事的任务全被挤爆。后来养成了显存增长的设置习惯开头加一段gpus tf.config.list_physical_devices(GPU) if gpus: try: for gpu in gpus: tf.config.experimental.set_memory_growth(gpu, True) except RuntimeError as e: print(e)set_memory_growth的效果是让 TF 按需申请显存而不是一开始就占满。这个设置对个人开发机、共享服务器来说非常实用。遇到 OOM 的时候除了调小 batch_size也别忘了看模型里是不是有变量被意外放大或者在tf.function里循环累积了某些临时张量这些隐蔽问题可以靠tf.debugging和内存分析工具揪出来。5.5 别急着给所有代码套上 tf.functionTensorFlow 2.x 引入tf.function是希望把 Python 代码转成计算图来提速但它不是免费的午餐。tf.function对 Python 代码有要求里面最好只用 TensorFlow 操作不要依赖 Python 的全局变量、list append 这种副作用否则容易出现莫名其妙的错误或者画蛇添足的跟踪开销。我见过不少初学者把整个训练循环包进tf.function结果跑出来的性能反而更差报错还看不懂。我的建议是先把代码用 Eager 模式跑通确保逻辑正确、指标合理再针对确定的热点函数尝试加tf.function。加之前先想清楚这一步到底是在加速训练还是在表演加速。Eager 模式下的排错体验比图模式好太多现代 TF 完全支持你先用最舒服的方式开发最后再考虑性能优化。最后说点大实话。我在实际项目里用 TensorFlow 的这几年最深的体会是框架之争远没有说得那么严重。模型能不能上线、上线后稳不稳定、出了问题你能不能快速定位这些才是一个工程师真正的核心竞争力。TensorFlow 教给我的不是某一个 API而是一整套从数据到部署的工程思维。如果你正卡在安装环境这一步先把环境装好把第一个模型跑通后面的问题都不大。如果真卡住了回头来看看这篇文章里写的排查顺序多数情况下你缺的不是能力只是一个还没踩过的坑。
企业数字化 ERP 产品动态
相关推荐
RS-485电动窗帘中控协议解析:帧结构、CRC校验与联调实现 简介:杜亚管状电机开合帘485协议文档面向智能家居集成商、电动窗帘控制开发者和中控调试人员,聚焦管状电机与外部设备之间的RS-485通讯规则与数据格式。内容围绕波特率9600bps、8位数据位、1位停止位、无校验等参数展开,说明以0x55为起始码的… · 2026/11/3 13:26:16
PyCharm 2025.3.3安装指南与性能优化技巧 1. PyCharm 2025.3.3 安装前的准备工作 作为一名使用PyCharm多年的开发者,我深知一个顺畅的安装过程对编程新手的重要性。PyCharm作为Python开发领域的顶级IDE,其2025.3.3版本带来了诸多性能优化和新功能,但在安装前仍需要做好充分准备。
1… · 2026/11/3 13:25:14
AutoCAD 2016安装与合法使用全攻略:从环境准备到授权配置 CAD 这行干了十来年,从最早的 R14 到现在的 2026 版,装过的机器没有一千也有八百台。每次带新人或者帮朋友处理电脑,绕不开的一个话题就是软件安装——尤其是 AutoCAD 2016 这个版本,至今仍有大量设计院、施工单位、加工厂在用&am… · 2026/11/3 13:25:14
Hindsight揭秘:大模型调用链中的私有路由中间件 1. “Hindsight”不是产品名,而是开发者圈里一个心照不宣的隐喻 最近在几个技术社区和内部协作频道里,“hindsight”这个词频繁出现在报错日志、调试截图和 Slack 消息中——但它既不是 OpenAI 官方 SDK 的模块名,也不是 Anthropic 或 Google… · 2026/11/3 13:55:47
AB1568蓝牙耳机开发实战:启动链路、ANC调试与NVkey固化避坑指南 简介:这份PDF资料面向从事Airoha洛达AB1568蓝牙耳机固件与应用开发的工程师,系统梳理该芯片平台从底层启动到上层功能实现的开发要点,适合具备一定嵌入式与蓝牙协议基础、希望快速上手或查漏补缺的中级开发者。压缩包内为1个PDF文件ÿ… · 2026/11/3 13:55:47
MySQL管理工具全解析:从图形化到命令行 1. MySQL管理工具全景解析 作为从业15年的数据库管理员,我见证了MySQL从一个小众数据库成长为全球最流行的开源关系型数据库的全过程。在这个过程中,各种MySQL管理工具如雨后春笋般涌现,它们极大提升了我们的工作效率。今天我就来系统梳理这些… · 2026/11/3 13:55:47
2024年TensorFlow实战:环境配置、框架对比与生产部署 1. 2024年再看TensorFlow:它没有被取代,只是换了赛道 先说一个我自己的感受。我在深度学习框架里摸爬滚打了六七年,前三年基本是TensorFlow重度用户,后面四年变成TensorFlow和PyTorch双修。中间有一段时间,圈内几乎所有… · 2026/11/3 13:55:47
零基础本地部署Deepseek:Ollama与Chatbox实战指南 简介:这份PDF资料面向希望在个人电脑上离线运行DeepSeek模型的开发者与AI爱好者,聚焦本地化部署这一实操场景,兼顾入门与进阶需求。内容围绕Ollama框架展开,涵盖从官网下载安装、按硬件条件选择1.5B至671B不同参数规模模型&#x… · 2026/11/3 13:55:47
FPGA通过SPI配置高速ADC:时序本质与三线/四线实现避坑指南 简介:面向FPGA开发者与硬件工程师的SPI配置ADC学习资料,聚焦FPGA通过SPI读写ADC内部寄存器这一实际工程问题,从通信原理到代码实现由浅入深展开,适合具备一定数字电路基础、希望掌握ADC配置时序的中级学习者参考。资源包共1个docx… · 2026/11/3 13:54:46
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 13:10:28
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 6:04:24
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 5:52:46
STM32F411RE与MAX14431实现SPI隔离:工业现场抗共模干扰实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59
ESP32+大模型AI硬件开发:从Demo到产品的8个工程问题 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59
基于MAX14431BAEE+与PIC18F85J10的SPI隔离方案设计与实践 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 13:10:28
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 6:04:24
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 5:52:46