IOS、Python自学心得30天 Day-4 TensorFlow 资料处理

前言:
到了要开始处理资料的部分,因为影像资料会有档案太大或是大小不一的问题,所以都要先预设成固定的格式来模拟训练

程序码:
方案一

train = tfds.load('mnist', split='train', as_supervised=True) #训练资料
test = tfds.load('mnist', split='test', as_supervised=True) #测试资料
def format_image(image, label):
  image = tf.cast(image, dtype=tf.float32)
  image = image / 255.0
  return  image, label

BATCH_SIZE = 32
BUFFER_SIZE = 10000

train_batches = train.cache().shuffle(BUFFER_SIZE).map(format_image).batch(BATCH_SIZE).prefetch(1)
test_batches = test.cache().map(format_image).batch(BATCH_SIZE).prefetch(1)

cache: 将资料全部载入快取记忆体,可加速模型训练
shuffle: 洗牌以打乱资料顺序
map: 使用某个函数来处理资料,这里用到的是自己写的 format_image 函数
batch: 将数个资料组成一个批次,这里一批包含 32 个样本: (image, label)
prefetch: 在 GPU 或 TPU 训练资料的过程,预先用 CPU 准备好下一批资料,可加速训练过程
(TPU)张量处理单元:是一种定制化的 ASIC 晶片,为谷歌的主要产品提供了计算支持,包括翻译、照片、搜索助理和 Gmail 等,并专门用於机器学习工作负载

方案二

# 资料路径
DATASET_PATH  = 'D://20210901/Demo1/dogImages'

# 影像大小
IMAGE_SIZE = (224, 224)

# 影像类别数
NUM_CLASSES = 2

# 若 GPU 记忆体不足,可调降 batch size 或冻结更多层网路
BATCH_SIZE = 8

# 冻结网路层数
FREEZE_LAYERS = 2

# Epoch 数
NUM_EPOCHS = 20

# 模型输出储存的档案
WEIGHTS_FINAL = 'model-resnet50-final.h5'

# 透过 data augmentation 产生训练与验证用的影像资料
train_datagen = ImageDataGenerator(rotation_range=40,
                                   width_shift_range=0.2,
                                   height_shift_range=0.2,
                                   shear_range=0.2,
                                   zoom_range=0.2,
                                   channel_shift_range=10,
                                   horizontal_flip=True,
                                   fill_mode='nearest')
train_batches = train_datagen.flow_from_directory(DATASET_PATH + '/train',
                                                  target_size=IMAGE_SIZE,
                                                  interpolation='bicubic',
                                                  class_mode='categorical',
                                                  shuffle=True,
                                                  batch_size=BATCH_SIZE)

valid_datagen = ImageDataGenerator()
valid_batches = valid_datagen.flow_from_directory(DATASET_PATH + '/valid',
                                                  target_size=IMAGE_SIZE,
                                                  interpolation='bicubic',
                                                  class_mode='categorical',
                                                  shuffle=False,
                                                  batch_size=BATCH_SIZE)

# 输出各类别的索引值
for cls, idx in train_batches.class_indices.items():
    print('Class #{} = {}'.format(idx, cls))


<<:  D7 - 如何用 Google Apps Script 将 Google 表单的回应即时同步在多个行事历上?

>>:  #7 - The Node Event Emitter

lejos ev3 (ev3 使用 java 完整攻略) - jerry Tsai

Ev3 是 LEGO® MINDSTORMS® 乐高公司发展的可程序机器人,有原生的专用语法,且可使...

铁人赛 Day27 -- CSS动画 animation -- @keyframes

前言 不是只有JavaScript 或 JQuery 才可以做出动画,现在连CSS也可以啦,於是我就...

[Java Day18] 4.6. 可变个数的参数

教材网址 https://coding104.blogspot.com/2021/06/java-V...

Day27 - 动态模型 part2 (LSTM with attention)

回顾一下昨天提到的,我们希望透过将 attention 机制加到 LSTM 中藉此找出每段语音中重要...

IOS、Python自学心得30天 Day-25 Firebase衔接Python-3

前言: 在试做的时候分成两个档案 firebase 设定的时候好像只能用一次 不然会报错 所以我写在...