深度学习鱼书笔记2——感知机、神经网络

1.异或门无法用一条直线的感知机实现从而引出非线性算法
2.神经网络符号深度学习鱼书笔记2——感知机、神经网络_第1张图片
3、使用np.shape会缺省一维的行数或列数
深度学习鱼书笔记2——感知机、神经网络_第2张图片
print(X.shape) # (2,)
print(B1.shape) # (3,)

4.softmax函数
深度学习鱼书笔记2——感知机、神经网络_第3张图片
输出总和为1是softmax函数的一个重要性质,可以把softmax函数的输出解释为“概率。

5.神经网络的推理处理:
神经网络的输入层有784个神经元,输出层有10个神经元。有2个隐藏层,第1个隐藏层有 50个神经元,第2个隐藏层有100个神经元。深度学习鱼书笔记2——感知机、神经网络_第4张图片深度学习鱼书笔记2——感知机、神经网络_第5张图片
6.均方误差在这里插入图片描述
7.交叉熵误差在这里插入图片描述
8.神经网络的学习分成下面4个步骤:
步骤1(mini-batch)
从训练数据中随机选出一部分数据,这部分数据称为mini-batch。我们 的目标是减小mini-batch的损失函数的值。
步骤2(计算梯度) 为了减小mini-batch的损失函数的值,需要求出各个权重参数的梯度。 梯度表示损失函数的值减小最多的方向。
步骤3(更新参数) 将权重参数沿梯度方向进行微小更新。
步骤4(重复) 重复步骤1、步骤2、步骤3。

9.两层神经网络的类

import sys, os
sys.path.append(os.pardir) from common.functions import *
from common.gradient import numerical_gradient class TwoLayerNet:
def __init__(self, input_size, hidden_size, output_size, weight_init_std=0.01):

# 初始化权重 
self.params = {} 
self.params['W1'] = weight_init_std * \ np.random.randn(input_size, hidden_size)
self.params['b1'] = np.zeros(hidden_size) 
self.params['W2'] = weight_init_std * \np.random.randn(hidden_size, output_size) 
self.params['b2'] = np.zeros(output_size)

def predict(self, x):
W1, W2 = self.params['W1'], self.params['W2'] 
b1, b2 = self.params['b1'], self.params['b2']
a1 = np.dot(x, W1) + b1 
z1 = sigmoid(a1)
a2 = np.dot(z1, W2) + b2 
y = softmax(a2)
return y

# x:输入数据, t:监督数据 def loss(self, x, t): y = self.predict(x)
return cross_entropy_error(y, t)
def accuracy(self, x, t): 
y = self.predict(x) 
y = np.argmax(y, axis=1) 
t = np.argmax(t, axis=1)
accuracy = np.sum(y == t) / float(x.shape[0]) 
return accuracy

# x:输入数据, t:监督数据
def numerical_gradient(self, x, t): loss_W = lambda W: self.loss(x, t)
grads = {}
grads['W1'] = numerical_gradient(loss_W, self.params['W1']) 
grads['b1'] = numerical_gradient(loss_W, self.params['b1']) 
grads['W2'] = numerical_gradient(loss_W, self.params['W2']) 
grads['b2'] = numerical_gradient(loss_W, self.params['b2'])
return grads

深度学习鱼书笔记2——感知机、神经网络_第6张图片

你可能感兴趣的:(深度学习,算法,神经网络,深度学习,python,机器学习)