cntk深度网络——从入门到转行一
开始
关于cntk的编译和安装,请参见相关文档。此文档用于cntk 2.0版的python。用于c++接口的有需求再整理资料。
如果你还没安装Cntk的运行环境工具包,那么可以先择使用预选安装cntk运行在Azure Notebook的托管环境。
如果你在你的机器上安装了cntk,在完成安装后你可以立即从Python 开始使用cntk(不要忘记激活你的python环境)。
>>> import cntk
>>> cntk.__version__
'2.0rc2+'
>>> cntk.minus([1, 2, 3], [4, 5, 6]).eval()
array([-3., -3., -3.], dtype=float32)
以上代码使用了带有两个数组常量的cntk节点。每个操作符都有一个eval()方法,该方法可以调用,该方法使用它的输入为该节点运行向前传递,并返回向前传递的结果。使用输入变量。更常见的例子是这样的:
>>> import numpy as np
>>> x = cntk.input_variable(2)
>>> y = cntk.input_variable(2)
>>> x0 = np.asarray([[2., 1.]], dtype=np.float32)
>>> y0 = np.asarray([[4., 6.]], dtype=np.float32)
>>> cntk.squared_error(x, y).eval({x:x0, y:y0})
array([ 29.], dtype=float32)
在上面的例子中,我们首先设置了两个带有形状(1、2)的输入变量,然后我们设置了一个带有这两个变量作为输入的squarederror节点。在eval()方法中,我们可以为这两个变量设置数据的输入映射。在本例中,我们传入两个numpy数组。平方误差当然是(2-4)2+(1-6)2=29。
大多数的数据容器,比如参数、常量、值等等,都实现了asarray()方法,该方法返回一个NumPy接口。
>>> import cntk as C
>>> c = C.constant(3, shape=(2,3))
>>> c.asarray()
array([[ 3., 3., 3.],
[ 3., 3., 3.]], dtype=float32)
>>> np.ones_like(c.asarray())
array([[ 1., 1., 1.],
[ 1., 1., 1.]], dtype=float32)
对于具有序列轴的值,asarray()不能工作,它要求形状是矩形的,并且大多数时间的序列都有不同的长度。在这种情况下,as序列(var)返回一个NumPy数组列表,其中每个NumPy数组都具有var的静态轴的形状。