mirror of
https://github.com/ml-explore/mlx.git
synced 2025-10-19 08:10:15 +08:00
Add a multi optimizer (#1916)
This commit is contained in:

committed by
GitHub

parent
a0737273d3
commit
9680f72cca
@@ -3,6 +3,7 @@
|
||||
import unittest
|
||||
|
||||
import mlx.core as mx
|
||||
import mlx.nn as nn
|
||||
import mlx.utils
|
||||
import mlx_tests
|
||||
|
||||
@@ -22,6 +23,29 @@ class TestTreeUtils(mlx_tests.MLXTestCase):
|
||||
self.assertEqual(list(zip(*flat_tree))[1], vals)
|
||||
self.assertEqual(mlx.utils.tree_unflatten(flat_tree), tree)
|
||||
|
||||
def test_merge(self):
|
||||
t1 = {"a": 0}
|
||||
t2 = {"b": 1}
|
||||
t = mlx.utils.tree_merge(t1, t2)
|
||||
self.assertEqual({"a": 0, "b": 1}, t)
|
||||
with self.assertRaises(ValueError):
|
||||
mlx.utils.tree_merge(t1, t1)
|
||||
with self.assertRaises(ValueError):
|
||||
mlx.utils.tree_merge(t, t1)
|
||||
|
||||
mod1 = nn.Sequential(nn.Linear(2, 2), nn.Linear(2, 2))
|
||||
mod2 = nn.Sequential(nn.Linear(2, 2), nn.Linear(2, 2))
|
||||
mod = nn.Sequential(mod1, mod2)
|
||||
|
||||
params1 = {"layers": [mod1.parameters()]}
|
||||
params2 = {"layers": [None, mod2.parameters()]}
|
||||
params = mlx.utils.tree_merge(params1, params2)
|
||||
for (k1, v1), (k2, v2) in zip(
|
||||
mlx.utils.tree_flatten(params), mlx.utils.tree_flatten(mod.parameters())
|
||||
):
|
||||
self.assertEqual(k1, k2)
|
||||
self.assertTrue(mx.array_equal(v1, v2))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
Reference in New Issue
Block a user