【问题标题】:dot product of two numpy arrays with known dimensions does not come out with the expected dimensions两个已知维度的 numpy 数组的点积不符合预期的维度
【发布时间】:2019-11-02 23:08:03
【问题描述】:

我正在对 2 个 numpy 数组进行点积处理,一个维度为 (150, 4),另一个维度为 (4, 1)。这应该会产生一个维度为 (150, 1) 的数组,但是,我得到一个 (150, 4) 的数组。

我已尝试创建数据列表并将其传递给数组构造函数。

x = iris.data #shape (150, 4)
y = np.array(y_actual) #shape (150, 1)

np.random.seed(1)

syn1 = 2 * np.random.random( (x.shape[1], x.shape[1]) ) - 1
syn2 = 2 * np.random.random( (x.shape[1], y.shape[1]) ) - 1

for i in range(10000):
    layer0 = x
    layer1 = sigmoid( np.dot(layer0, syn1) )
    layer2 = sigmoid( np.dot(layer1, syn2) )

    l2_err = layer2 - y

    l2_delta = l2_err * sigmoid(layer2, deriv = True)
    l1_err = np.dot(l2_delta, syn2.T)
    l1_delta = l1_err * sigmoid(layer1, deriv = True)

我希望 layer2 的尺寸为 (150, 1),但我收到的尺寸为 (150, 4)。

【问题讨论】:

    标签: python arrays numpy dimensions


    【解决方案1】:

    我已经添加了维度 - 尽我所能推断:

    x = iris.data #shape (150, 4)
    y = np.array(y_actual) #shape (150, 1)
    
    np.random.seed(1)
    
    syn1 = 2 * np.random.random( (x.shape[1], x.shape[1]) ) - 1  # (4,4)
    syn2 = 2 * np.random.random( (x.shape[1], y.shape[1]) ) - 1  # (4,1)
    
    for i in range(10000):
        layer0 = x
        layer1 = sigmoid( np.dot(layer0, syn1) )   # (150,4) dot (4,4)=>(150,4)
        layer2 = sigmoid( np.dot(layer1, syn2) )   # (150,4) dot (4,1)=>(150,1)
    
        l2_err = layer2 - y       # (150,1) (150,1) => (150,1)
    
        l2_delta = l2_err * sigmoid(layer2, deriv = True)
        l1_err = np.dot(l2_delta, syn2.T)     # (150,1) (1,4) => (150,4)
        l1_delta = l1_err * sigmoid(layer1, deriv = True)
    

    【讨论】:

    • 是的,layer2 应该是一个 (150, 1) 数组,但是在计算完成后,layer2 不知何故最终成为一个 (150, 4) 数组。发生这种情况有什么原因吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-21
    • 2020-07-07
    • 2021-05-02
    • 1970-01-01
    • 2021-06-14
    • 2019-09-19
    相关资源
    最近更新 更多