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

《Python 深度学习》刷书笔记 Chapter 2 构建一个简单的神经网络

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

《Python 深度学习》刷书笔记 Chapter 2 构建一个简单的神经网络

文章目录
  • 2.2 神经网络的表示
    • 代码清单 2-1
    • 代码清单 2-2, 2-3
    • 代码清单 2-4
    • 代码清单 2-5-1
    • 代码清单 2-5-2
    • 代码清单 2-6
    • 张量切片
  • 写在最后


2.2 神经网络的表示 代码清单 2-1
# 解决编译器报错 using tenserflow backend的问题
import os
os.environ['KERAS_BACKEND']='tensorflow'

from keras.datasets import mnist

(train_images,train_labels),(test_images,test_labels) = mnist.load_data()

# 训练集大小
train_images.shape
len(train_labels)

# 训练集标签
train_labels

# 测试集
test_images.shape
len(test_labels)

# 测试集标签
test_labels
array([7, 2, 1, ..., 4, 5, 6], dtype=uint8)

代码清单 2-2, 2-3
from keras import models
from keras import layers
import numpy as np

# 神经网络框架
network = models.Sequential()
network.add(layers.Dense(512,activation='relu',input_shape=(28*28,)))
network.add(layers.Dense(10,activation='softmax'))

# 编译步骤
network.compile(optimizer = 'rmsprop', loss = 'categorical_crossentropy', metrics=['accuracy']);

代码清单 2-4
# 准备图像数据
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

代码清单 2-5-1
# 准备数据标签

# from keras.utils import to_categoriacl
from tensorflow.keras.utils import to_categorical

train_labels  = to_categorical(train_labels)
test_labels = to_categorical(test_labels)
# 训练网络
# loss:训练数据的损失 acc:网络在训练数据上的精度
network.fit(train_images , train_labels , epochs = 5 , batch_size = 128)
Epoch 1/5
60000/60000 [==============================] - 3s 43us/step - loss: 0.0283 - accuracy: 0.9917
Epoch 2/5
60000/60000 [==============================] - 3s 44us/step - loss: 0.0216 - accuracy: 0.9937
Epoch 3/5
60000/60000 [==============================] - 3s 42us/step - loss: 0.0173 - accuracy: 0.9951
Epoch 4/5
60000/60000 [==============================] - 3s 44us/step - loss: 0.0127 - accuracy: 0.9965
Epoch 5/5
60000/60000 [==============================] - 3s 48us/step - loss: 0.0099 - accuracy: 0.9972

代码清单 2-5-2
test_loss, test_acc = network.evaluate( test_images , test_labels)
print('test_acc:',test_acc)
10000/10000 [==============================] - 0s 28us/step
test_acc: 0.9797000288963318

代码清单 2-6

观察MNIST数据集,MNIST数据集通常用于手写识别普通的神经网络,我们结合本小节提到的张量知识来观察该数据集

# 读入数据集
from keras.datasets import mnist

(train_images, train_labels), (test_images, test_labels) = mnist.load_data()

# 显示张量mnist个数
print(train_images.ndim)

# 显示张量的形状
print(train_images.shape)

# 显示张量的数据类型
print(train_images.dtype)
3
(60000, 28, 28)
uint8

接着,我们观察MNIST数据集里面各个样本的样子
我们以第四个数字为例,显示第四个数字

digit  = train_images[4]

import matplotlib.pyplot as plt
plt.imshow(digit,cmap=plt.cm.binary)
plt.show()


张量切片

通过冒号,选择特定的张良新元素叫做张量切片

# 对于一个三维的张量,有三种不同的写法

# 写法一
my_slice = train_images[10:100]
print(my_slice.shape)

# 写法二
my_slice2 = train_images[10:100, :, :]
print(my_slice2.shape)
    
# 写法三
my_slice3 = train_images[10:100, 0:28, 0:28]
print(my_slice3.shape)

(90, 28, 28)
(90, 28, 28)
(90, 28, 28)

写在最后

注:本文代码来自《Python 深度学习》,做成电子笔记的方式上传,仅供学习参考,作者均已运行成功,如有遗漏请练习本文作者

各位看官,都看到这里了,麻烦动动手指头给博主来个点赞8,您的支持作者最大的创作动力哟! <(^-^)>
才疏学浅,若有纰漏,恳请斧正
本文章仅用于各位同志作为学习交流之用,不作任何商业用途,若涉及版权问题请速与作者联系,望悉知

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/286569.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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