《Grokking Deep Learning》之学习信号,忽略噪声(正则化和批处理)

正则化和批处理

一、过拟合

MNIST的三层网络


import sys, numpy as np #引入系统库及numPy库
from keras.datasets import mnist   #引入keras数据集  MNIST
(x_train, y_train), (x_test, y_test) = mnist.load_data()    # 读取训练集集,测试集
images, labels = (x_train[0:1000].reshape(1000,28*28)/255, y_train[0:1000])  #二维图像转化为一维
one_hot_labels = np.zeros((len(labels),10))  #one_hot标签 


for i,l in enumerate(labels):
    one_hot_labels[i][l] = 1
    
    
labels = one_hot_labels   # 初始化训练集的labels(one-hot化的  0-9)
test_images = x_test.reshape(len(x_test),28*28) / 255   #测试集
test_labels = np.zeros((len(y_test),10))  #初始化测试集的label 为 0 
for i,l in enumerate(y_test):  # 根据数据集,把测试集label进行初始化,对应的位置为1 
    test_labels[i][l] = 1   
np.random.seed(1)   #随机种子 
relu = lambda x:(x>=0) * x  #lambda函数 计算relu
relu2deriv = lambda x: x>=0   #lambda函数 计算relu的导数 (类似于函数)

alpha, iterations, hidden_size, pixels_per_image, num_labels = (0.005, 350, 40, 784, 10) #初始化超参数


weights_0_1 = 0.2*np.random.random((pixels_per_image,hidden_size)) - 0.1
weights_1_2 = 0.2*np.random.random((hidden_size,num_labels)) - 0.1


for j in range(iterations):  #迭代次数  
    error, correct_cnt = (0.0, 0)    #每次迭代清零 error和正确预测数量correct_cnt(count)
 
    for i in range(len(images)):   #每次遍历所有图像数据
         layer_0 = images[i:i+1]
         layer_1 = relu(np.dot(layer_0,weights_0_1))
         layer_2 = np.dot(layer_1,weights_1_2)
         error += np.sum((labels[i:i+1] - layer_2) ** 2)
         correct_cnt += int(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黎明之道

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值