吴恩达-机器学习课后题07-使用神经网络实现手写数字识别

1、题目

与上一题相同,使用神经网络实现

2、预先知识学习

在这里插入图片描述
神经网络:对每一层传入值进行计算,然后插入偏置单元,即全为1的单元 ,进入下一层计算,层层传递,最终得出结果。由于给出了theta的值,具体如何推导在下一节课给出

3、实现

1、导入数据

data = sio.loadmat(path)
X = data['X']
y = data['y']

将y转为一维数组方便未来与结果进行对比,得出准确率

#将y转为一维数组,方便将来计算准确率
y = y.flatten()

2、对第一层加入偏置项

#插入偏置项
X = np.insert(X,0,values=1,axis=1)
print(X.shape)

3、导入题目给出的theta

theta = sio.loadmat(thetaPath)
# print(theta.keys())
theta1 = theta['Theta1']
theta2 = theta['Theta2']

4、定义sigmoid函数

#定义sigmoid函数
def sigmoid(z):
    return 1/(1+np.exp(-z))

4、逐层计算

a1 = X
z2 = X@theta1.T#第一层运算结果
a2 = sigmoid(z2)#第二层输入
print(a2.shape)
a2 = np.insert(a2,0,values=1,axis=1)#插入偏置项
print(a2.shape)
z3 = a2@theta2.T
a3 = sigmoid(z3)
print(a3.shape)

5、得到每一个数据的预测结果

y_pred = np.argmax(a3,axis=1)
y_pred = y_pred+1

注意:argmax得到的是标,最终结果需要+1

6、准确率计算

acc = np.mean(y_pred==y)
print(acc)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值