个人机器学习实验 / 踩坑记录仓库。主线是把 Wolfram (Mathematica) 训练并导出的神经网络模型,在 Python 框架(主要是 MXNet)里重新加载并复现推理结果,外加 xgboost / xlearn 两个独立的小实验。
姐妹仓库:
MathematicaMachineLearning—— 通用 ML 知识,映射到 Mathematica 中对照。本仓库偏「具体实验与问题记录」,姐妹仓库偏「通用知识对照」。
踩坑点的汇总见 PROBLEMS.md。
- 代码原本是 Python 2(
print x形式)。仓库内脚本已陆续向 Python 3 迁移,但未经运行验证(见下)。 - 仓库根目录下的
mxnet/、xgboost/文件夹会遮蔽同名的真实库:在仓库根目录直接import mxnet会导入本地文件夹而非 MXNet。运行脚本时请在脚本所在子目录下,或调整sys.path。 - 早期脚本里散落大量硬编码绝对路径(
/Users/hypergroups/...、/home/...、/mnt/hgfs/...)。可复现的脚本已改为基于__file__的仓库相对路径;引用了仓库未包含的模型的脚本,在文件顶部留了可配置常量并加了注释。 - 版本对应关系:MXNet
1.0↔ Mathematica11.3;MXNet1.4↔ Mathematica12.0。
mxnet/ MXNet 加载 Wolfram 导出模型(主体)
python/
1.0/ MXNet 1.0 / Mma 11.3
model-wolfram/ 导出的模型:LeNet / object_count / simple model
/ wolfram.lstm / example(*-symbol.json + *-0000.params)
script/
myPath.py 基于 __file__ 计算 root_dir 的公共路径助手
wolfram_v1/ 第一版加载脚本(LeNet / object_count / lstm / no_lstm)
wolfram_v1a/ v1 的图像 RGB 变体(test_rgb.py)
wolfram_v2/ 第二版迭代
1.4/ MXNet 1.4 / Mma 12.0
script/mma12.0/ test_lstm.py、tempa.py、model.mma12.0/
Data/ 测试图片(horse / little_girl / 8 等)
python/problem/v1.1.3/ good.nd.bind.py(标记「可用」的 11.3/12.0 双版本对照)
predict_image.ipynb 预测笔记本
wolfram-mxnet/ 跨 Wolfram 11.3 / 12.0 版本对比,独立成组
model-wolfram/ 11.3 与 12.0 两套 lstm / simple model 参数
python/load_bind_test1.py 最完整:11.3 与 12.0 并排加载预测
test.py
xgboost/problem_v0.7/ xgboost gblinear 二分类实验(含一个待排查问题,见 PROBLEMS.md)
train.py train test log.v0.6 log.v0.71 model_lr.dump.head
xlearn/problem/ xlearn (FM/FFM) 稀疏数据实验(含内存问题,见 PROBLEMS.md)
train.problem.5 *.bin *.model memory.PNG
加载 Wolfram 导出模型并推理的通用流程:
sym = mx.symbol.load(<...>-symbol.json)nd = mx.nd.load(<...>-0000.params)- 手动填入输入与 LSTM 初始状态:
nd["Input"] = <数据>nd["4.State"] = mx.nd.array([[0,0,0,0,0]])nd["4.CellState"] = mx.nd.array([[0,0,0,0,0]])- (Mma 12.0 的模型还需要额外的
nd["Nodes"],从*.nodes.txt读取)
e = sym.bind(ctx, nd)→e.forward()→out[0].asnumpy()
图像预处理(对应 Wolfram 的 NetEncoder["Image"] 约定):
img = 1 - asarray(img)/255,并 transpose 到 (batch, RGB, H, W),尺寸 224×224。注意 1 - x 的颜色反相是关键的一步。
| 板块 | 做什么 | 入口脚本 |
|---|---|---|
mxnet/.../wolfram_v1·v1a·v2 |
同一批模型(LeNet / object_count / lstm)的多轮加载调试 | wolfram.inception_v1.object_count.py |
mxnet/python/problem/v1.1.3 |
标记可用的 11.3/12.0 对照 | good.nd.bind.py |
wolfram-mxnet |
11.3 vs 12.0 lstm 加载差异(12.0 多 Nodes 输入) |
python/load_bind_test1.py |
xgboost/problem_v0.7 |
gblinear 二分类,含 AUC 恒为 0.5 的问题 | train.py |
xlearn/problem |
FM/FFM 稀疏数据,含内存问题 | (数据 + 截图) |