推荐 :谷歌JAX 助力科学计算
import jax.numpy as jnp
from jax import grad, jit, vmap
grad_tanh = grad(jnp.tanh)
print(grad_tanh(2.0))
[OUT]:0.070650816
print(grad(grad(jnp.tanh))(2.0))
print(grad(grad(grad(jnp.tanh)))(2.0))
[OUT]:-0.13621868
0.25265405
fun: 代表需要进行向量化操作的具体函数; in_axes:输入格式为元组,代表fun中每个输入参数中,使用哪一个维度进行向量化; out_axes: 经过fun计算后,每组输出在哪个维度输出。
import jax.numpy as jnp
import numpy as np
import jax
a = np.array(([1,3],[23, 5]))
print(a)
[out]: [[ 1 3]
[23 5]]
b = np.array(([11,7],[19,13]))
print(b)
[OUT]: [[11 7]
[19 13]]
print(jnp.add(a,b))
#[[1+11, 3+7]]
# [[23+19, 5+13]]
[OUT]: [[12 10]
[42 18]]
print(jax.vmap(jnp.add, in_axes=(0,0), out_axes=0)(a,b))
#[[1+11, 3+7]]
#[[23+19, 5+13]]
[OUT]: [[12 10]
[42 18]]
print(jax.vmap(jnp.add, in_axes=(0,0), out_axes=1)(a,b))
# [[1+11, 3+7]]
#[[23+19, 5+13]] 再以列转置输出
[OUT]: [[12 42]
[10 18]]
from jax.numpy import jnp
A, B, C, D = 2, 3, 4, 5
def foo(tree_arg):
x, (y, z) = tree_arg
return jnp.dot(x, jnp.dot(y, z))
from jax import vmap
K = 6 # batch size
x = jnp.ones((K, A, B)) # batch axis in different locations
y = jnp.ones((B, K, C))
z = jnp.ones((C, D, K))
tree = (x, (y, z))
vfoo = vmap(foo, in_axes=((0, (1, 2)),))
print(vfoo(tree).shape)
import jax.numpy as jnp
from jax import jit
def slow_f(x):
# Element-wise ops see a large benefit from fusion
return x * x + x * 2.0
x = jnp.ones((5000, 5000))
fast_f = jax.jit(slow_f) # 静态编译slow_f;
%timeit -n10 -r3 fast_f(x)
%timeit -n10 -r3 slow_f(x)
10 loops, best of 3: 24.2 ms per loop
10 loops, best of 3: 82.8 ms per loop



关注公众号:拾黑(shiheibook)了解更多
[广告]赞助链接:
四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/

随时掌握互联网精彩
赞助链接
排名
热点
搜索指数
- 1 总书记考察这两地有何深意 7904689
- 2 国家卫健委叫停阿尔茨海默病手术 7809605
- 3 现在许多年轻人选择“无证婚姻” 7714547
- 4 台风路径奇特调头西行 专家解读 7618589
- 5 人民日报:呼吁“同志”称呼重归主流 7524474
- 6 国防科大江苏投档线直逼清华北大 7423706
- 7 暴恐音视频危害大 不看不存不转发 7332242
- 8 陈佩斯:20年没演电影是因为黄渤霸屏 7236282
- 9 美政府扬言全面封杀中国购买农地 7141541
- 10 赵本山女儿抑郁复发:不敢让爸知道 7040708