fit函数 model_【Tensorflow2.0】7、全流程model.fit模型训练方法

第一种方法直接用keras的fit方法,以fashion mnist为例

本文包括一个完整的深度学习模型构建过程。有tf.data读数据集的方法;使用keras callbacks来实现checkpoint,学习率衰减,Earlystop等功能。最后结合scikit-learn,对模型的推理使用做了说明。

import tensorflow as tf

import datetime

import matplotlib

matplotlib.use("Agg")#这个设置可以使matplotlib保存.png图到磁盘

import matplotlib.pyplot as plt

from functools import partial

import numpy as np

import pandas as pd

import os

from sklearn.metrics import confusion_matrix

from sklearn.metrics import classification_report1

2

3

4

5

6

7

8

9

10

11

12

#jupyter 中开启该选项,否则不执行

%matplotlib inline1

2

配置超参数

batch_size=64

epochs=5

regularizer=1e-3

total_train_samples=60000

total_test_samples=10000

lr_decay_epochs=1

output_folder="./model_output"

#用来保存模型以及我们需要的所有东西

if not os.path.exists(output_folder):

os.makedirs(output_folder)

save_format="hdf5" #或saved_model

if save_format=="hdf5":

save_path_models=os.path.join(output_folder,"hdf5_models")

if not os.path.exists(save_path_models):

os.makedirs(save_path_models)

save_path=os.path.join(save_path_models,"ckpt_epoch{epoch:02d}_val_acc{val_accuracy:.2f}.hdf5")

elif save_format=="saved_model":

save_path_models=os.path.join(output_folder,"saved_models")

if not os.path.exists(save_path_models):

os.makedirs(save_path_models)

save_path=os.path.join(save_path_models,"ckpt_epoch{epoch:02d}_val_acc{val_accuracy:.2f}.ckpt")

#用来保存日志

log_dir= os.path.join(output_folder,'logs_{}'.format(datetime.datetime.now().strftime("%Y%m%d-%H%M%S")))

if not os.path.exists(log_dir):

os.makedirs(log_dir)1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

选择指定显卡及自动调用显存

physical_devices = tf.config.experimental.list_physical_devices('GPU')#列出所有可见显卡

print("All the available GPUs:\n",physical_devices)

if physical_devices:

gpu=physical_devices[0]#显示第一块显卡

tf.config.experimental.set_memory_growth(gpu, True)#根据需要自动增长显存

tf.config.experimental.set_visible_devices(gpu, 'GPU')#只选择第一块1

2

3

4

5

6

All the available GPUs:

[PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')]1

2

准备数据

fashion_mnist=tf.keras.datasets.fashion_mnist

(train_x,train_y),(test_x,test_y)=fashion_mnist.load_data()

train_x,test_x = train_x[...,np.newaxis]/255.0,test_x[...,np.newaxis]/255.0

total_train_sample = train_x.shape[0]

total_test_sample=test_x.shape[0]

class_names = ['T-shirt/top', 'Trouser', 'Pullover', 'Dress', 'Coat',

'Sandal', 'Shirt', 'Sneaker', 'Bag', 'Ankle boot']1

2

3

4

5

6

7

8

使用tf.data来准备训练集和测试集

train_ds = tf.data.Dataset.from_tensor_slices((train_x,train_y))

test_ds = tf.data.Dataset.from_tensor_slices((test_x,test_y))

train_ds=train_ds.shuffle(buffer_size=batch_size*10).batch(batch_size).prefetch(buffer_size = tf.data.experimental.AUTOTUNE).repeat()

test_ds = test_ds.batch(batch_size).prefetch(buffer_size = tf.data.experimental.AUTOTUNE)#不加repeat,执行一次就行1

2

3

4

5

准备模型定义

l2 = tf.keras.regularizers.l2(regularizer)#定义模型正则化方法

ini = tf.keras.initializers.he_normal()#定义参数初始化方法

conv2d = partial(tf.keras.layers.Conv2D,activation='relu',padding='same',kernel_regularizer=l2,bias_regularizer=l2)

fc = partial(tf.keras.layers.Dense,activation='relu',kernel_regularizer=l2,bias_regularizer=l2)

maxpool=tf.keras.layers.MaxPooling2D

dropout=tf.keras.layers.Dropout1

2

3

4

5

6

7

开始定义模型,用functional方法

x_input = tf.keras.layers.Input(shape=(28,28,1),name='input_node')

x = conv2d(128,(5,5))(x_input)

x = maxpool((2,2))(x)

x = conv2d(256,(5,5))(x)

x = maxpool((2,2))(x)

x = tf.keras.layers.Flatten()(x)

x = fc(128)(x)

x_output=fc(10,activation=None,name='output_node')(x)

model = tf.keras.models.Model(inputs=x_input,outputs=x_output)1

2

3

4

5

6

7

8

9

10

打印模型结构

print("The model architure:\n")

print(model.summary())1

2

The model architure:

Model: "model"

____

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
GAN(Generative Adversarial Networks)是一种深度学习模型,它可以生成与训练数据类似的新数据。GAN 由两个神经网络组成:生成器和判别器。生成器用于生成新的数据,而判别器用于判断生成器生成的数据是否与训练数据一致。GAN 的训练过程是这样的:首先,生成器生成一些数据,然后判别器对生成的数据进行评估,如果生成的数据与训练数据相似,则判别器会给出正面的反馈,否则会给出负面的反馈。接着,根据判别器的反馈,生成器会调整自己的参数以使生成的数据更接近于训练数据。这个过程不断迭代,直到生成器生成的数据与训练数据相似。 在 TensorFlow 中实现 GAN,我们需要定义两个神经网络:生成器和判别器。生成器通过一些随机噪声来生成新的数据,而判别器将原始数据和生成的数据作为输入,并尝试区分哪些是真实的数据,哪些是生成的数据。GAN 的训练过程可以看作是一个博弈过程,生成器和判别器在不断地优化自己以取得更好的成绩。 下面是一个基于 TensorFlow 的 GAN 实践代码示例: ``` python import tensorflow as tf from tensorflow import keras from tensorflow.keras import layers # 定义生成器 def make_generator_model(): model = keras.Sequential() model.add(layers.Dense(7*7*256, use_bias=False, input_shape=(100,))) model.add(layers.BatchNormalization()) model.add(layers.LeakyReLU()) model.add(layers.Reshape((7, 7, 256))) assert model.output_shape == (None, 7, 7, 256) model.add(layers.Conv2DTranspose(128, (5, 5), strides=(1, 1), padding='same', use_bias=False)) assert model.output_shape == (None, 7, 7, 128) model.add(layers.BatchNormalization()) model.add(layers.LeakyReLU()) model.add(layers.Conv2DTranspose(64, (5, 5), strides=(2, 2), padding='same', use_bias=False)) assert model.output_shape == (None, 14, 14, 64) model.add(layers.BatchNormalization()) model.add(layers.LeakyReLU()) model.add(layers.Conv2DTranspose(1, (5, 5), strides=(2, 2), padding='same', use_bias=False, activation='tanh')) assert model.output_shape == (None, 28, 28, 1) return model # 定义判别器 def make_discriminator_model(): model = keras.Sequential() model.add(layers.Conv2D(64, (5, 5), strides=(2, 2), padding='same', input_shape=[28, 28, 1])) model.add(layers.LeakyReLU()) model.add(layers.Dropout(0.3)) model.add(layers.Conv2D(128, (5, 5), strides=(2, 2), padding='same')) model.add(layers.LeakyReLU()) model.add(layers.Dropout(0.3)) model.add(layers.Flatten()) model.add(layers.Dense(1)) return model # 定义损失函数 cross_entropy = tf.keras.losses.BinaryCrossentropy(from_logits=True) # 定义生成器损失函数 def generator_loss(fake_output): return cross_entropy(tf.ones_like(fake_output), fake_output) # 定义判别器损失函数 def discriminator_loss(real_output, fake_output): real_loss = cross_entropy(tf.ones_like(real_output), real_output) fake_loss = cross_entropy(tf.zeros_like(fake_output), fake_output) total_loss = real_loss + fake_loss return total_loss # 定义优化器 generator_optimizer = tf.keras.optimizers.Adam(1e-4) discriminator_optimizer = tf.keras.optimizers.Adam(1e-4) # 训练过程 @tf.function def train_step(images): noise = tf.random.normal([BATCH_SIZE, 100]) with tf.GradientTape() as gen_tape, tf.GradientTape() as disc_tape: generated_images = generator(noise, training=True) real_output = discriminator(images, training=True) fake_output = discriminator(generated_images, training=True) gen_loss = generator_loss(fake_output) disc_loss = discriminator_loss(real_output, fake_output) gradients_of_generator = gen_tape.gradient(gen_loss, generator.trainable_variables) gradients_of_discriminator = disc_tape.gradient(disc_loss, discriminator.trainable_variables) generator_optimizer.apply_gradients(zip(gradients_of_generator, generator.trainable_variables)) discriminator_optimizer.apply_gradients(zip(gradients_of_discriminator, discriminator.trainable_variables)) # 主程序 generator = make_generator_model() discriminator = make_discriminator_model() EPOCHS = 100 noise_dim = 100 num_examples_to_generate = 16 seed = tf.random.normal([num_examples_to_generate, noise_dim]) for epoch in range(EPOCHS): for image_batch in train_images: train_step(image_batch) # 测试过程 predictions = generator(seed, training=False) ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值