为什么形状不一致 numpy vs cntk?
Why inconsistent shapes numpy vs cntk?
我刚开始学习cntk。但是,我有一个基本问题阻碍了我的进步。我通过了以下测试:
import numpy as np
from cntk import input_variable, plus
def test_simple(self):
x_input = np.asarray([[1, 2, 2]], dtype=np.int64)
assert (1, 3) == x_input.shape
y_input = np.asarray([[5, 3, 3]], dtype=np.int64)
assert (1, 3) == y_input.shape
x = input_variable(x_input.shape[1])
assert (3, ) == x.shape
y = input_variable(y_input.shape[1])
assert (3, ) == y.shape
x_plus_y = plus(x, y)
assert (3, ) == x_plus_y.shape
res = x_plus_y.eval({x: x_input, y: y_input})
assert 6 == res[0, 0, 0]
assert 5 == res[0, 0, 1]
assert 5 == res[0, 0, 2]
我知道输出的形状是 (1, 1, 3),因为第一轴和第二轴分别是批处理和默认动态轴。
但是,为什么我需要将输入变量的形状设置为 (3,) 而不是 (1, 3)。使用 (1, 3) 失败。
为什么图中输入节点的形状与用作该节点输入的 numpy 数据不一致?
谢谢,
稻田
这在"arguments"对Function.forward. Another description is here的描述中有一点解释。您感到困惑的原因可能是 CNTK 进行了一些 "helpful" 转换。
如果您将输入指定为 (1,3),那么您需要提供一个 (1,3) 数组列表,以防没有序列轴的小批量或 (x,1,3) 列表在具有序列轴的小批量情况下的数组(其中 x 对于小批量中的每个序列可能不同)。同样,如果您将输入指定为 (3,),则您需要提供 (3,) 向量列表或 (x,3) 向量列表。
混淆可能源于未提供列表的情况。在这种情况下,CNTK 遍历提供的张量的引导轴并从这些元素中创建一个列表,例如(5,1,3) 张量变成一批 5 个元素,每个元素的形状为 (1,3)。
我刚开始学习cntk。但是,我有一个基本问题阻碍了我的进步。我通过了以下测试:
import numpy as np
from cntk import input_variable, plus
def test_simple(self):
x_input = np.asarray([[1, 2, 2]], dtype=np.int64)
assert (1, 3) == x_input.shape
y_input = np.asarray([[5, 3, 3]], dtype=np.int64)
assert (1, 3) == y_input.shape
x = input_variable(x_input.shape[1])
assert (3, ) == x.shape
y = input_variable(y_input.shape[1])
assert (3, ) == y.shape
x_plus_y = plus(x, y)
assert (3, ) == x_plus_y.shape
res = x_plus_y.eval({x: x_input, y: y_input})
assert 6 == res[0, 0, 0]
assert 5 == res[0, 0, 1]
assert 5 == res[0, 0, 2]
我知道输出的形状是 (1, 1, 3),因为第一轴和第二轴分别是批处理和默认动态轴。
但是,为什么我需要将输入变量的形状设置为 (3,) 而不是 (1, 3)。使用 (1, 3) 失败。
为什么图中输入节点的形状与用作该节点输入的 numpy 数据不一致?
谢谢, 稻田
这在"arguments"对Function.forward. Another description is here的描述中有一点解释。您感到困惑的原因可能是 CNTK 进行了一些 "helpful" 转换。
如果您将输入指定为 (1,3),那么您需要提供一个 (1,3) 数组列表,以防没有序列轴的小批量或 (x,1,3) 列表在具有序列轴的小批量情况下的数组(其中 x 对于小批量中的每个序列可能不同)。同样,如果您将输入指定为 (3,),则您需要提供 (3,) 向量列表或 (x,3) 向量列表。
混淆可能源于未提供列表的情况。在这种情况下,CNTK 遍历提供的张量的引导轴并从这些元素中创建一个列表,例如(5,1,3) 张量变成一批 5 个元素,每个元素的形状为 (1,3)。