纯记录自己在深度学习方面的学习历程--基于b站的人工智能许多up主的教学视频
- 定义一个多层感知机的类
import numpy as np from utils.features import prepare_for_training from utils.hypothesis import sigmoid, sigmoid_gradient # 定义一个类,叫多层感知机--multilayer perceptron class MultilayerPerceptron: # 初始化,data--数据,label--标签,layers--神经网络层数,normalize_data--归一化 def __init__(self, data, labels, layers, normalize_data=False): data_processed = prepare_for_training(data, normalize_data=normalize_data)[0] self.data = data_processed self.labels = labels self.layers = layers # 预计三层 28*28*1=784 25 10 self.normalize_data = normalize_data self.ws = MultilayerPerceptron.w_init(layers) # 对权重参数的初始化 # 训练模块 max--迭代次数,alpha--学习率 def train(self, max=1000, alpha=0.1): unroll_ws = MultilayerPerceptron.unroll(self.ws) (optimized_ws, loss_history) = MultilayerPerceptron.gradient_descent(self.data, self.labels, self.layers, unroll_ws, max, alpha) self.ws = MultilayerPerceptron.roll(optimized_ws, self.layers) return self.ws, loss_history # 测试 def predict(self, data): data_processed = prepare_for_training(data, normalize_data=self.normalize_data)[0] num_examples = data_processed.shape[0] predictions = MultilayerPerceptron.forward(data_processed, self.layers, self.ws) return np.argmax(predictions, axis=1).reshape((num_examples, 1)) # 对权重参数的初始化 def w_init(layers): num_layers = len(layers) ws = {} # 实际循环两次,生成两个w矩阵:25*785 10*26 for index in range(num_layers - 1): income = layers[index] outcome = layers[index + 1] # +1根据权重公式xw+b,考虑到b,例784*25+25=(784+1)*25 ws[index] = np.random.rand(outcome, income + 1) * 0.05 # *0.05是使随机生成的值尽量小 return ws # 将矩阵展开为一维向量 def unroll(m