栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

李宏毅《机器学习》笔记:8. keras

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

李宏毅《机器学习》笔记:8. keras

参考文章:
https://www.cnblogs.com/ncuhwxiong/p/9836648.html

文章目录
  • 1 库导入部分
  • 2. 载入数据并进行预处理
  • 3. 神经网络
    • 3.1 定义神经网络模型
    • 3.2 模型评估
    • 3.3 最佳模型
  • 4 完整code

祝大家国庆快乐,学个习为祖国庆生!
<--------挖坑5处,欢迎评论区答疑和指正 !------->

2021.09.30
LeeML-Notes:P15,P16,P17
1 库导入部分
import keras  #导入Keras
from keras.models import Sequential # 导入序贯模型
from keras.layers.core import Dense,Dropout,Activation # 导入全连接层,激活函数
# from keras.layers import Conv2D,MaxPooling2D,Flatten
from keras.optimizers import SGD,Adam # 导入优化函数SGD和Adam
from keras.utils import np_utils
from keras.datasets import mnist #导入手写集
import numpy as np
  • Dropout

    Dropout的主要目的是使网络中过度拟合的影响最小化。

    Dropout技术是通过随机减少神经网络中相互连接的神经元的数量来实现的。

    摘自:https://baijiahao.baidu.com/s?id=1667213407197650339&wfr=spider&for=pc

  • mnist

    MNIST是一组经过预处理的手写数字图片数据集,它为机器学习的初学者提供了一个练手的机会,可以在真实的数据上用学到的算法来解决问题。由于很多的机器学习教程都以MNIST作为入门项目,因此它也被称作是机器学习领域的“hello world”。

    MNIST中每个样本都是一张长28、宽28的灰度图片,其中包含一个0-9的数字。

2. 载入数据并进行预处理
def load_data():
    (x_train,y_train),(x_test,y_test) = mnist.load_data()  # 下载mnist数据集

	#切数据 定训练数据量
    number = 10000  #x_train.shape为(60000,28,28)说明一共有6万张图片,每张是28*28。y_train是6万维的列向量(60000,)。test有1万张
    x_train = x_train[0:number] #取前1万张作为训练集
    y_train = y_train[0:number]
   
	#数据格式变化 
	x_train = x_train.reshape(number,28*28) #x_train原来是(10000,28,28)现在转化为(1000,28*28)
    x_test = x_test.reshape(x_test.shape[0],28*28) #x_test原来是(10000,28,28)现在转化为(10000,28*28)
    
	#astype转换数据类型
	x_train = x_train.astype('float32')
    x_test = x_test.astype('float32')
	
	#onehot编码
    y_train = np_utils.to_categorical(y_train,10) #onehot编码
    y_test = np_utils.to_categorical(y_test,10)
    
   #没看懂 去掉应该不受影响
    x_train = x_train
    x_test = x_test

	# #归一化到0-1区间  变为只有0 1的矩阵
    x_train = x_train/255 #这个255可以不用除
    x_test = x_test/255
    return (x_train,y_train),(x_test,y_test)
(x_train,y_train),(x_test,y_test) = load_data()
  • 【2行_挖坑1:这个写法有点不懂】(x_train,y_train),(x_test,y_test) = mnist.load_data()

    但我觉得是固定写法,也就是从mnist下载数据集,分别是训练的一套和测试的一套。

  • x_test.shape[0]

    因为我们不知道x_test具体个数 但他的形式我们知道(个数,28,28),所以取第一项就是它的个数。我觉得应该也可以查看一下这个数据集是多少 然后直接填数也可以

  • np_utils.to_categorical(y_train,10)

    onehot编码,将结果分了0~9十个类

    5 --> [ 0, 0, 0, 0, 0,1, 0, 0, 0, 0]

  • x_train = x_train x_test = x_test【挖坑2】啥用,是否能去掉

  • x_train = x_train/255

    归一化 每个pixel我们用一个0-1之间的值进行表示.【26行_挖坑3】不知道是不是因为RGB三通道 ?所以才255

.【26行_挖坑4】为什么归一化后收敛速度反而慢了,没有不归一好?是不是一定要归一化?

#注释掉    
    # x_train=x_train/255
    # x_test=x_test/255

  • 【29行_挖坑5:为什么要再取一下】(x_train,y_train),(x_test,y_test) = load_data()
3. 神经网络 3.1 定义神经网络模型
model=Sequential()
model.add(Dense(input_dim=28*28,units=500,activation='sigmoid'))
model.add(Dense(units=500,activation='sigmoid'))
model.add(Dense(units=500,activation='sigmoid'))
model.add(Dense(units=10,activation='softmax'))

  • model = sequential()

    序贯模型是函数式模型的简略版,为最简单的线性、从头到尾的结构顺序,不分叉,是多个网络层的线性堆叠。

  • Dense

    全连接层

  • model.add(Dense(units=10,activation=‘softmax’))

    最后一个layer,因为output是10维,所以units=10,activation一般选softmax,意味着输出每个dimension只会介于0-1之间,总和是1,就可以把它当做为一种几率的东西。

3.2 模型评估
#选择loss function的形式与optimizer的类别
model.compile(loss='mse',optimizer=SGD(lr=0.1),metrics=['accuracy'])
  • loss='mse’

    均方误差作为损失函数

  • optimizer=SGD(lr=0.1)

    梯度下降方式为SGD,随机梯度下降,学习率为0.1

  • metrics=[‘accuracy’]

    指标要的正确率

3.3 最佳模型
#开始训练
model.fit(x_train,y_train,batch_size=100,epochs=30)

#用test集进行检验:
result=model.evaluate(x_test,y_test)
print(result[1])
  • x_train,y_train

    作为训练数据和标签

  • batch_size=100

    100数据打个包,一起训练

    注意:在划分batch的时候要随机打乱training data,不过在Keras这里我们只要指定batch size,里面都由Keras帮我们随机放数据进去。

  • epochs=30

    若每个数据训练一遍,交一个epochs 那么30遍学习结束

  • 要看一个epoch的更新速度,batch size大一些,会稳定一些,可以进行并行运算加速,但是太大,gpu吃不消

50000个数据:

  • batch_size=1,epochs=1,那么就是1epoch训练了50000次,每次1个数据;训练1遍结束;
  • batch_size=1,epochs=30,那么就是1epoch训练了5000次,每次10个数据;训练1遍结束;

因为GPU可以并行,所以基本上下面比上面快10倍

  • model.evaluate(x_test,y_test)

    模型来预测x_test和y_test准确率

#case1:测试集正确率
score = model.evaluate(x_test,y_test)
print("Total loss on Testing Set:", score[0])
print("Accuracy of Testing Set:", score[1])

#case2:模型预测
result = model.predict(x_test)
  • model.evaluate(x_test,y_test)

    把x_test,y_test喂给它,就会自动给你计算出Accuracy(精准性)。

    它会output一个二维的向量,第一个维度代表了在test set上loss【损失值】,第二个维度代表了在test set上的accuracy【正确率】,这两个值是不一样的。

  • predict

    第二种是做predict,就是系统上线后,没有正确答案的,call predict进行预测

4 完整code
import keras
from keras.models import Sequential
from keras.layers.core import Dense,Dropout,Activation
# from keras.layers import Conv2D,MaxPooling2D,Flatten
from keras.optimizers import SGD,Adam
from keras.utils import np_utils
from keras.datasets import mnist
import numpy as np


#载入数据并进行预处理:
def load_data():
    (x_train,y_train),(x_test,y_test) = mnist.load_data() #x_train.shape为(60000,28,28)说明一共有6万张图片,每张是28*28。y_train是6万维的列向量。test有1万张
    number = 10000
    x_train = x_train[0:number] #取前1万张作为训练集
    y_train = y_train[0:number]
    x_train = x_train.reshape(number,28*28) #x_train原来是(10000,28,28)现在转化为(1000,28*28)
    x_test = x_test.reshape(x_test.shape[0],28*28) #x_test原来是(10000,28,28)现在转化为(10000,28*28)
    x_train = x_train.astype('float32')
    x_test = x_test.astype('float32')
    y_train = np_utils.to_categorical(y_train,10) #onehot编码
    y_test = np_utils.to_categorical(y_test,10)
    x_train = x_train
    x_test = x_test
    x_train = x_train/255 #这个255可以不用除
    x_test = x_test/255
    return (x_train,y_train),(x_test,y_test)

(x_train,y_train),(x_test,y_test) = load_data()

#搭NN:
model = Sequential()
model.add(Dense(input_dim=28*28,units=500,activation='sigmoid'))
model.add(Dense(units=500,activation='sigmoid'))
model.add(Dense(units=10,activation='softmax'))

#选择loss function的形式与optimizer的类别
model.compile(loss='mse',optimizer=SGD(lr=0.1),metrics=['accuracy'])

#开始训练
model.fit(x_train,y_train,batch_size=100,epochs=30)

#用test集进行检验:
result=model.evaluate(x_test,y_test)
print(result[1])
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/286184.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号