UFuncTypeError: ufunc ‘multiply‘ did not contain a loop with signature matchi 读深度学习一书中遇到错误

在学《深度学习入门:基于Python的理论与实现》中,2.5.2小节中,用与门、或门、与非门实现异或门。

自己打了一份代码,如下

import numpy as np
def OR(x1, x2):
    x = np.array([x1, x2])
    w = np.array([0.5, 0.5]
    b = -0.2
    tmp = np.sum(w*x) + b
    if tmp <= 0:
        return 0
    else:
        return 1


def AND(x1,x2):
    x = np.array([0,1])
    w = np.array([0.5,0.5])
    b = -0.7
    ans = np.sum(x*w) + b
    if ans >= 0:
        return 1
    else:
        return 0

def NAND(x1,x2):
    ans = AND(x1,x2)
    if ans:
        return 0
    else:
        return 1

x1 = input()
x2 = input()
ans1 = NAND(x1,x2)
ans2 = OR(x1,x2)
ans = AND(ans1,ans2)
print(ans)

在实际运行之后,发现报错
UFuncTypeError: ufunc ‘multiply‘ did not contain a loop with signature matchi 读深度学习一书中遇到错误_第1张图片
在网上找答案,说的都是用float()转换,弄得我一头雾水,后来在继续学习的过程中,发现书上举了这样一个例子
UFuncTypeError: ufunc ‘multiply‘ did not contain a loop with signature matchi 读深度学习一书中遇到错误_第2张图片
猜测这个报错与书上说的情况很相似,于是尝试加上这样两行代码

x = x.astype(np.float)
w = w.astype(np.float)

代码就能跑起来了

贴上改完后的代码

import numpy as np
def OR(x1, x2):
    x = np.array([x1, x2])
    w = np.array([0.5, 0.5])
    x = x.astype(np.float)
    w = w.astype(np.float)
    b = -0.2
    tmp = np.sum(w*x) + b
    if tmp <= 0:
        return 0
    else:
        return 1


def AND(x1,x2):
    x = np.array([0,1])
    w = np.array([0.5,0.5])
    b = -0.7
    ans = np.sum(x*w) + b
    if ans >= 0:
        return 1
    else:
        return 0

def NAND(x1,x2):
    ans = AND(x1,x2)
    if ans:
        return 0
    else:
        return 1

x1 = input()
x2 = input()
ans1 = NAND(x1,x2)
ans2 = OR(x1,x2)
ans = AND(ans1,ans2)
print(ans)

文末留下的疑问:为什么我只转换了OR()中的数据类型,AND()中的却不用,就能跑起来呢?为什么呢???

你可能感兴趣的:(深度学习,python)