深度学习-神经网络

多维数组的运算

  1. 多维数组
A = np.array([1,2,3,4])#一维数组
B = np.array([[1,2],
			  [3,4],	
			  [5,6]])#二维数组
A.shape#结果是一个元组tuple,(4,) 二维数组返回的元组是(4,3),三维数组返回的元组是(4,3,2)
np.ndim(A)#获得数组维度

A.shape得到的二位数组(4,2) 表示(行,列)
2. 矩阵乘积

A = np.array([[1,2],[3,4]])
B = np.array([[5,6],[7,8]])
np.dot(A,B)#矩阵点积

矩阵A*B,必须是A的列等于B的行,比如A:(3,2) B(2,1)可以相乘。所以先A.shape、B.shape获取到A,B的结构,再np.dot(A,B)。

3层神经网络的实现

在这里插入图片描述
如上图所示,权重和隐藏层的神经元的右上角有一个"(1)",它表示权重和神经元的层号。权重的右下角有两个数字表示后一层神经和前一层神经的索引号,比如,W12表示前一层的第2个神经元到后一层的第1个神经元的权重。
a3(1) = w11(1) x1+w12(1) x2+b1(1)

实现上述加和:A1 = np.dot(X,W1) + B1

X = np.array([1.0,0.5])
W1 = np.array([[0.1,0.3,0.5],[0.2,0.4,0.6]])
B1 = np.array([0.1,0.2,0.3])

A1 = np.dot(X,W1) + B1
Z1 = sigmoid(A1)#sigmoid激活函数h()

输出层所用的激活函数,要根据求解的问题的性质决定。一般,回归问题可以使用恒等函数,二分类问题可以使用sigmoid函数,多元分类问题可以使用softmax函数。

3层神经层的代码实现:

import numpy as np
def init_network():
    network = {}
    network['w1'] = np.array([[0.1,0.3,0.5],[0.2,0.4,0.6]])
    network['b1'] = np.array([0.1,0.2,0.3])
    network['w2'] = np.array([[0.1,0.4],[0.2,0.5],[0.3,0.6]])
    network['b2'] = np.array([0.1,0.2])
    network['w3'] = np.array([[0.1,0.3],[0.2,0.4]])
    network['b3'] = np.array([0.1,0.2])
    
    return network
def sigmoid(x):
    return 1/(1 + np.exp(-x))

def identity_function(x):
    return x

def forward(network,x):
    w1,w2,w3 = network['w1'],network['w2'],network['w3']
    b1,b2,b3 = network['b1'],network['b2'],network['b3']
    
    a1 = np.dot(x,w1) + b1
    z1 = sigmoid(a1)
    a2 = np.dot(z1,w2) + b2
    z2 = sigmoid(a2)
    a3 = np.dot(z2,w3) + b3
    y = identity_function(a3)#恒等函数
    return y

network = init_network()
x = np.array([1.0,0.5])
y = forward(network,x)
print(y)#[0.31682708 0.69627909]

恒等函数

恒等函数会将输入的原样输出,不加任何的改动地直接输出。

identity_function(x)::
	return x

softmax函数

y k = e x p ( a k ) / ∑ k = 1 n e x p ( a i ) y_k = exp(a_k)/\sum_{k=1}^nexp(a_i) yk=exp(ak)/k=1nexp(ai)
代码实现:

def softmax(a):
	exp_a = np.exp(a)
	sum_exp_a = np.sum(exp_a)
	y = exp_a / sum_exp_a
	return y

softmax函数的输出是0.0到1.0之间的实数。并且,softmax函数的输出值的总和是1。
注意,计算机在处理“数”,数值必须是再4字节或8个字节的有效数据宽度,就是表示的数值范围是有限的,因此超大值无法表示的问题。所以上述的softmax函数的代码可以改善为:

def softmax(a):
	c = np.max(a)
	exp_a = np.exp(a-c)
	sum_exp_a = np.sum(exp_a)
	y = exp_a / sum_exp_a
	return y
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值