||
1. 参数
首先比较二者的参数部分:
np.max:(a, axis=None, out=None, keepdims=False)
求序列的最值
最少接收一个参数
axis:默认为列向(也即 axis=0),axis = 1 时为行方向的最值;
np.maximum:(X, Y, out=None)
X 与 Y 逐位比较取其大者;
最少接收两个参数
2. 使用上
>> np.max([-2, -1, 0, 1, 2])
2
>> np.maximum([-2, -1, 0, 1, 2], 0)
array([0, 0, 0, 1, 2])
# 当然 np.maximum 接受的两个参数,也可以大小一致
# 或者更为准确地说,第二个参数只是一个单独的值时,其实是用到了维度的 broadcast 机制;
点滴分享,福泽你我!Add oil!
3.代码实例
编写ReLU(Rectified Linear Unit)函数(激活函数),称修正线性单元
代码:
import numpy as np
def ReLU(x):
return np.maximum(0,x)
x = np.array([-1,-2,3,5])
y = ReLU(x)
print(y)
4. 常用函数
np.ndim() 获取维数
x.shape 获取数组形状,返回元组
np.dot(A,B) 两个矩阵相乘,点积;可应用到神经网络的内积
np.argmax(y) 其中:y为向量(或矩阵),作用:获取y值最高的元素的索引
具体说明:numpy中获取array的某一个维度中数值最大的那个元素的索引
详见:https://blog.csdn.net/t20134297/article/details/105007292/
np.sum() 求和,注意妙用,看一下例子。
实例代码:
import numpy as np
y = np.array([1,2,1,0])
t = np.array([1,2,0,0])
print(y==t) #[ True True False True]
np.sum(y==t) #3 注:直接可以对布尔型数组求和
np.log() 表示以e为底的自然对数(loge);以交叉熵误差函数为例写代码:
import numpy as np
def cross_entropy_error(y,t):
delta = 1e-7
return -np.sum(t * np.log(y + delta))
#np.log(0)会变为负无穷大-inf,这样一来就会导致后续计算无法进行。作为保护性对策,添加一个微小值delta可以防止负无限大的发生!
t=[0,0,1,0,0,0,0,0,0,0] #(one-hot表示)
y=[0.1,0.05,0.6,0.0,0.05,0.1,0.0,0.1,0.0,0.0] #(softmax输出)
cross_entropy_error(np.array(y),np.array(t)) #0.510825457099338
y=[0.1,0.05,0.1,0.0,0.05,0.1,0.0,0.6,0.0,0.0]
print(cross_entropy_error(np.array(y),np.array(t))) #2.302584092994546
np.random.choice() 可以从指定的数据中随机选择想要的数据,如:
print(np.random.choice(60000,10)) #从0到59999之间随机选择10个数
#输出 [ 5533 1909 24109 51750 345 5226 3927 41261 38667 6871]
应用 案例展示:选出mini-batch
mini-batch(小批量数据)可以作为全体训练数据的近似值!
train_size = x_train.shape[0]
batch_size = 10
batch_mask = np.random.choice(train_size,batch_size )
x_batch = x_train[batch_mask] #train_dataset
t_batch = t_train[batch_mask] #train_label
np.arange() 如np.arange(5)会生成一个Numpy数组[0,1,2,3,4]
案例展示:
y[np.arange(batch_size),t] #batch_size = 5; t = [2,7,0,9,4]
#会生成Numpy数组[y[0,2],y[1,7],y[2,0],y[3,9],y[4,4]] 此种方式值得学习
numpy.zeros_like(a) a是一个ndarray,即数组或矩阵。函数作用是生成像a一样大小的0矩阵。看代码:
In [1]: a = np.arange(24).reshape(4,6)
... a_0 = np.zeros_like(a)
... a.shape
... a_0.shape
... a_0
Out [1]: (4, 6)
Out [1]: (4, 6)
Out [1]: array([[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0]])
综合案例展示:(实例代码:神经网络传递过程实现)
import numpy as np
def sigmoid(x):
return 1 / (1 + np.exp(-x))
def identity_function(x): #恒等函数,相当于σ()
return x
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 forward(network,x):
W1,W2,W3 = network['W1'],network['W2'],network['W2']
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)
注意:一般地,回归问题可以使用恒等函数;二分类问题可以使用sigmoid函数;多元分类问题可以使用softmax函数!
softmax函数:输出总和为1是softmax函数的一个重要性质,正因为这个性质,我们才把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
点滴分享,福泽你我!Add oil!
【参考】
https://blog.csdn.net/qq_36387683/article/details/83509010
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2025-1-8 06:23
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社