数据处理常用函数
-
加载内置数据集,返回数据类型为numpy
(train_images, train_label), (_, _) = tf.keras.datasets.mnist.load_data()
-
将原始数据转化为tf内置的数据集形式
datasets = tf.data.Dataset.from_tensor_slices(train_images)
-
数据是否需要打乱,是否需要划分为batch
- 可以选择打乱的程度
- 是否每次迭代之后都需要打乱
- batch的大小(之后每次迭代时,next自动取一个batch的数据)
- 可以用
list(datasets.as_numpy_iterator)
查看数据
datasets = datasets.shuffle(buffer_size).batch(batch_size)
tf.keras.Sequential
用法
-
快速的创建一个堆叠式的模型,模型中的每一层layer,可以用add来添加
-
如何add 一层, 以全链接层为例
- 直接用
model.add(tf,keras.layers.Dense(8))
此时,只是创建了一层框架,还没有调用build函数来构建layer中的参数 - 如果指定input_shape(),则会在add的时候就构建参数
model.add(tf.keras.layers.Dense(8, input_shape(16,)))
- 最开始增加一层input_layer 可以在add的时候构建参数
model.add(tf.keras.input(16,))
来指定(注意,input_shape都不应该包含batch_size, 且model创建参数也只是和shape的最后一个维度有关 )
- 直接用
loss
定义
- corss_entropy: 表示预测模型和真实值差距的大小
- 注意点:
- 输出的是batch 的平均loss 还是sum loss 【可以指定】
- 默认预测的输出是概率,如果不是归一化的概率,则需要显式指定
from_logits=false
- 常用于计算loss的
- 参考链接:links
train 的基本框架
def train_step(image):
# 接受一个批次的图片,做一次训练
noise = tf.random.normal([batch_size, noise_dim]) # 生成batch_size个向量
with tf.GradientTape() as gen_tape, tf.GradientTape() as disc_tage:
real_out = discriminator(image, training=True)
gen_image = generator(noise, training=True)
fake_out = discriminator(gen_image, training=True)
gen_loss = generator_loss(fake_out)
disc_loss = discriminator_loss(real_out, fake_out)
gradient_gen = gen_tape.gradient(gen_loss, generator.trainable_variables)
gradient_disc = disc_tage.gradient(disc_loss, discriminator.trainable_variables)
generator_opt.apply_gradients(zip(gradient_gen, generator.trainable_variables))
discriminator_opt.apply_gradients(zip(gradient_disc, discriminator.trainable_variables))
def train(datasets, epochs):
for epoch in range(epochs):
for batch in datasets:
train_step(batch)
print(".",end="")
generate_plot_image(generator, seed)
```