Sequential模型
Sequential模型字面上的翻译是顺序模型,给人的感觉是线性模型,但实际上Sequential模型可以构建非常复杂的神经网络,包括全连接神经网络、卷积神经网络(CNN)、循环神经网络(RNN)等等。Sequential更准确的理解应该是堆叠,通过堆叠许多层,构建出深度神经网络。
以前整理的Sequential模型
Sequential模型
对比tensorflow和keras
以前的非线性多项式回归模型(tensorflow实现)
每次一篇10分钟,小步快跑攻陷Tensorflow(逻辑回归)
四大步骤
1 数据集整理
2 定义模型
3 训练/学习
4 预测/评估
实战
用keras组建神经网络,对minist数据集进行处理。
#配置环境
import os
import sys
import time
import numpy as np
from keras import models
from keras import layers
from keras.datasets import mnist
from keras.utils import to_categorical
from tensorflow.keras.callbacks import TensorBoard
#解决reuse问题,可以反复的执行
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()
#查看训练集数据维度
print(train_images.shape)
#查看训练集目标维度
print(len(train_labels))
#查看测试集数据维度
print(test_images.shape)
#查看测试机目标维度
print(len(test_labels))
#预处理数据
"""
数据进行预处理,将其变换为网络要求的形状,并缩放到所有值都在 [0, 1] 区间。训练图像保
存在一个 uint8 类型的数组中,其形状为 (60000, 28, 28),取值区间为 [0, 255]。需要将其
变换为一个 float32 数组,其形状为 (60000, 28 * 28),取值范围为 0~1。
"""
train_images=train_images.reshape(60000, 28 * 28)
train_images=train_images.astype('float32')/255
test_images=test_images.reshape(10000, 28 * 28)
test_images=test_images.astype('float32')/255
#标签进行分类编码。将类别向量转换为二进制(只有0和1)
train_labels = to_categorical(train_labels)
test_labels = to_categorical(test_labels)
print(train_labels)
print(test_labels)
###################################建模##################################
#设置全局参数
##
n_batch_size = 128
##训练代数,
n_epochs = 10
#构建网络
"""
2 个 Dense 层,密集连接(也叫全连接)的神经层。
第二层(也是最后一层)是一个 10 路 softmax 层,它将返回一个由 10 个概率值(总和为 1)组成的数组
"""
network = models.Sequential()
network.add(layers.Dense(512, activation='relu', input_shape=(28 * 28,)))
network.add(layers.Dense(10, activation='softmax'))
"""
优化器(optimizer):基于训练数据和损失函数来更新网络的机制。
损失函数(loss function):网络如何衡量在训练数据上的性能,即网络如何朝着正确的方向前进。
在训练和测试过程中需要监控的指标(metric):本例只关心精度,即正确分类的图像所占的比例。
"""
network.compile(optimizer='rmsprop',
loss='categorical_crossentropy',
metrics=['accuracy'])
#训练网络,这里要使用tensorboard
network.fit(train_images, train_labels,
epochs=n_epochs, batch_size=n_batch_size,
callbacks=[TensorBoard(log_dir='./graphs')])
#测试数据(精度)
test_loss, test_acc = network.evaluate(test_images, test_labels)
print('test_acc:', test_acc)
看看效果
image.png
网友评论