0. Baseline
tf.keras搭建神经网络八股:六步法,实践鸢尾花分类、MNIST手写数字识别、Fashion-mnist数据集
- 第一步:import所需库
- 第二步:导入数据集。拓展:自制数据集、数据增强
- 第三步:逐层搭建神经网络
- 第四步:配置训练方法
- 第五步:执行训练过程。拓展:断点续训
- 第六步:打印网络结构。拓展:参数提取,acc/loss可视化,前向推理实现与应用
#------
import tensorflow as tf
#------
mnist = tf.keras.datasets.mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0
#------
model = tf.keras.models.Sequential([
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dense(10, activation='softmax')
])
#------
model.compile(optimizer='adam',
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False),
metrics=['sparse_categorical_accuracy'])
#------
model.fit(x_train, y_train, batch_size=32, epochs=5, validation_data=(x_test, y_test), validation_freq=1)
#------
model.summary()
1. 自制数据集,解决本领域应用
1.1观察数据集数据结构,配成特征标签对
四个文件从上到下分别为:测试集图片文件、训练集图片文件、测试集标签、训练集标签

图片文件夹、标签文件的内容分别为:


1.2 定义函数generateds(图片路径, 标签文件)生成数据集
def generateds(path, txt):
f = open(txt, 'r') # 以只读形式打开txt文件
contents = f.readlines() # 读取文件中所有行
f.close() # 关闭txt文件
x, y_ = [], [] # 建立空列表
for content in contents: # 逐行取出
value = content.split() # 以空格分开,图片路径为value[0] , 标签为value[1] , 存入列表
img_path = path + value[0] # 拼出图片路径和文件名
img = Image.open(img_path) # 读入图片
img = np.array(img.convert('L')) # 图片变为8位宽灰度值的np.array格式
img = img / 255. # 数据归一化 (实现预处理)
x.append(img) # 归一化后的数据,贴到列表x
y_.append(value[1]) # 标签贴到列表y_
print('loading : ' + content) # 打印状态提示
x = np.array(x) # 变为np.array格式
y_ = np.array(y_) # 变为np.array格式
y_ = y_.astype(np.int64) # 变为64位整型
return x, y_ # 返回输入特征x,返回标签y_
convert()是图像实例对象的一个方法,接受一个 mode 参数,用以指定一种色彩模式。
| mode参数 | 色彩模式 |
|---|---|
| ‘1’ | 1位像素,黑白,每字节一个像素存储 |
| ‘L’ | 8位像素,黑白 |
| ‘P’ | 8位像素,使用调色板映射到任何其他模式 |
| ‘RGB’ | 3 × 8 3\times8 3×8位像素,真彩色 |
| ‘RGBA’ | 4 × 8 4\times8 4×8位像素,带透明度掩模的真彩色 |
| ‘CMYK’ | 4 × 8 4\times8 4×8位像素,分色 |
| ‘YCbCr’ | 3 × 8 3\times8 3×8位像素,彩色视频格式 |
| ‘I’ | 32位有符号整数像素 |
| ‘F’ | 32位浮点像素 |
1.3 完整代码
#---导入库---
import tensorflow as tf
from PIL import Image
import numpy as np
import os
train_path = './mnist_image_label/mnist_train_jpg_60000/'
train_txt = './mnist_image_label/mnist_train_jpg_60000.txt'
x_train_savepath = './mnist_image_label/mnist_x_train.npy'
y_train_savepath = './mnist_image_label/mnist_y_train.npy'
test_path = './mnist_image_label/mnist_test_jpg_10000/'
test_txt = './mnist_image_label/mnist_test_jpg_10000.txt'
x_test_savepath = './mnist_image_label/mnist_x_test.npy'
y_test_savepath = './mnist_image_label/mnist_y_test.npy'
#---定义生成数据集的函数---
def generateds(path, txt):
f = open(txt, 'r') # 以只读形式打开txt文件
contents = f.readlines() # 读取文件中所有行
f.close() # 关闭txt文件
x, y_ = [], [] # 建立空列表
for content in contents: # 逐行取出
value = content.split() # 以空格分开,图片路径为value[0] , 标签为value[1] , 存入列表
img_path = path + value[0] # 拼出图片路径和文件名
img = Image.open(img_path) # 读入图片
img = np.array(img.convert('L')) # 图片变为8位宽灰度值的np.array格式
img = img / 255

本文详述使用TensorFlow和Keras搭建神经网络的六步法,涵盖数据集准备、模型构建、训练、评估及应用,包括数据增强、断点续训、模型参数管理和可视化技巧。
最低0.47元/天 解锁文章
1293

被折叠的 条评论
为什么被折叠?



