Skip to content

Commit

Permalink
2024-02-09 01:59:05
Browse files Browse the repository at this point in the history
  • Loading branch information
wizardforcel committed Feb 8, 2024
1 parent 435f94c commit 9b8c1ee
Show file tree
Hide file tree
Showing 10 changed files with 500 additions and 500 deletions.
40 changes: 20 additions & 20 deletions totrans/gen-dl_04.md
Original file line number Diff line number Diff line change
Expand Up @@ -106,26 +106,26 @@ MLP 是一种判别模型(而不是生成模型),但在本书后面的章
import numpy as np
from tensorflow.keras import datasets, utils

(x_train, y_train), (x_test, y_test) = datasets.cifar10.load_data() ![1](img/1.png)
(x_train, y_train), (x_test, y_test) = datasets.cifar10.load_data() #

NUM_CLASSES = 10

x_train = x_train.astype('float32') / 255.0 ![2](img/2.png)
x_train = x_train.astype('float32') / 255.0 #
x_test = x_test.astype('float32') / 255.0

y_train = utils.to_categorical(y_train, NUM_CLASSES) ![3](img/3.png)
y_train = utils.to_categorical(y_train, NUM_CLASSES) #
y_test = utils.to_categorical(y_test, NUM_CLASSES)
```

![1](img/#co_deep_learning_CO1-1)

加载 CIFAR-10 数据集。`x_train``x_test`分别是形状为`[50000, 32, 32, 3]``[10000, 32, 32, 3]``numpy`数组。`y_train``y_test`分别是形状为`[50000, 1]``[10000, 1]``numpy`数组,包含每个图像类的范围为 0 到 9 的整数标签。

![2](img/#co_deep_learning_CO1-2)

缩放每个图像,使像素通道值介于 0 和 1 之间。

![3](img/#co_deep_learning_CO1-3)

对标签进行独热编码——`y_train``y_test`的新形状分别为`[50000, 10]``[10000, 10]`

Expand Down Expand Up @@ -311,31 +311,31 @@ Keras 提供了许多内置的损失函数可供选择,或者你可以创建
##### 示例 2-8\. 调用 `fit` 方法来训练模型

```py
model.fit(x_train ![1](img/1.png)
, y_train ![2](img/2.png)
, batch_size = 32 ![3](img/3.png)
, epochs = 10 ![4](img/4.png)
, shuffle = True ![5](img/5.png)
model.fit(x_train #
, y_train #
, batch_size = 32 #
, epochs = 10 #
, shuffle = True #
)
```

![1](img/#co_deep_learning_CO2-1)

原始图像数据。

![2](img/#co_deep_learning_CO2-2)

独热编码的类标签。

![3](img/#co_deep_learning_CO2-3)

`batch_size` 确定每个训练步骤将传递给网络多少观察值。

![4](img/#co_deep_learning_CO2-4)

`epochs` 确定网络将被展示完整训练数据的次数。

![5](img/#co_deep_learning_CO2-5)

如果 `shuffle = True`,每个训练步骤将从训练数据中随机抽取批次而不重复。

Expand Down Expand Up @@ -383,16 +383,16 @@ model.evaluate(x_test, y_test)
CLASSES = np.array(['airplane', 'automobile', 'bird', 'cat', 'deer', 'dog'
, 'frog', 'horse', 'ship', 'truck'])

preds = model.predict(x_test) ![1](img/1.png)
preds_single = CLASSES[np.argmax(preds, axis = -1)] ![2](img/2.png)
preds = model.predict(x_test) #
preds_single = CLASSES[np.argmax(preds, axis = -1)] #
actual_single = CLASSES[np.argmax(y_test, axis = -1)]
```

![1](img/#co_deep_learning_CO3-1)

`preds`是一个形状为`[10000, 10]`的数组,即每个观测的 10 个类别概率的向量。

![2](img/#co_deep_learning_CO3-2)

我们将这个概率数组转换回一个单一的预测,使用`numpy``argmax`函数。这里,`axis = -1`告诉函数将数组折叠到最后一个维度(类别维度),因此`preds_single`的形状为`[10000, 1]`

Expand Down
92 changes: 46 additions & 46 deletions totrans/gen-dl_06.md
Original file line number Diff line number Diff line change
Expand Up @@ -115,37 +115,37 @@ x_test = preprocess(x_test)
```py
encoder_input = layers.Input(
shape=(32, 32, 1), name = "encoder_input"
) ![1](img/1.png)
) #
x = layers.Conv2D(32, (3, 3), strides = 2, activation = 'relu', padding="same")(
encoder_input
) ![2](img/2.png)
) #
x = layers.Conv2D(64, (3, 3), strides = 2, activation = 'relu', padding="same")(x)
x = layers.Conv2D(128, (3, 3), strides = 2, activation = 'relu', padding="same")(x)
shape_before_flattening = K.int_shape(x)[1:]

x = layers.Flatten()(x) ![3](img/3.png)
encoder_output = layers.Dense(2, name="encoder_output")(x) ![4](img/4.png)
x = layers.Flatten()(x) #
encoder_output = layers.Dense(2, name="encoder_output")(x) #

encoder = models.Model(encoder_input, encoder_output) ![5](img/5.png)
encoder = models.Model(encoder_input, encoder_output) #
```

![1](img/#co_variational_autoencoders_CO1-1)

定义编码器(图像)的“输入”层。

![2](img/#co_variational_autoencoders_CO1-2)

顺序堆叠`Conv2D`层。

![3](img/#co_variational_autoencoders_CO1-3)

将最后一个卷积层展平为一个向量。

![4](img/#co_variational_autoencoders_CO1-4)

将这个向量连接到 2D 嵌入中的`Dense`层。

![5](img/#co_variational_autoencoders_CO1-5)

定义编码器的 Keras`Model`——一个将输入图像并将其编码为 2D 嵌入的模型。

Expand Down Expand Up @@ -177,12 +177,12 @@ encoder = models.Model(encoder_input, encoder_output) ![5](img/5.png)
##### 示例 3-4. 解码器

```py
decoder_input = layers.Input(shape=(2,), name="decoder_input") ![1](img/1.png)
x = layers.Dense(np.prod(shape_before_flattening))(decoder_input) ![2](img/2.png)
x = layers.Reshape(shape_before_flattening)(x) ![3](img/3.png)
decoder_input = layers.Input(shape=(2,), name="decoder_input") #
x = layers.Dense(np.prod(shape_before_flattening))(decoder_input) #
x = layers.Reshape(shape_before_flattening)(x) #
x = layers.Conv2DTranspose(
128, (3, 3), strides=2, activation = 'relu', padding="same"
)(x) ![4](img/4.png)
)(x) #
x = layers.Conv2DTranspose(
64, (3, 3), strides=2, activation = 'relu', padding="same"
)(x)
Expand All @@ -198,26 +198,26 @@ decoder_output = layers.Conv2D(
name="decoder_output"
)(x)

decoder = models.Model(decoder_input, decoder_output) ![5](img/5.png)
decoder = models.Model(decoder_input, decoder_output) #
```

![1](img/#co_variational_autoencoders_CO2-1)

定义解码器(嵌入)的`Input`层。

![2](img/#co_variational_autoencoders_CO2-2)

将输入连接到`Dense`层。

![3](img/#co_variational_autoencoders_CO2-3)

将这个向量重塑成一个张量,可以作为输入传递到第一个`Conv2DTranspose`层。

![4](img/#co_variational_autoencoders_CO2-4)

`Conv2DTranspose`层堆叠在一起。

![5](img/#co_variational_autoencoders_CO2-5)

定义解码器的 Keras `Model`——一个模型,将潜在空间中的嵌入解码为原始图像域。

Expand All @@ -228,10 +228,10 @@ decoder = models.Model(decoder_input, decoder_output) ![5](img/5.png)
##### 示例 3-5. 完整自编码器

```py
autoencoder = Model(encoder_input, decoder(encoder_output)) ![1](img/1.png)
autoencoder = Model(encoder_input, decoder(encoder_output)) #
```

![1](img/#co_variational_autoencoders_CO3-1)

定义完整自编码器的 Keras `Model`——一个模型,将图像通过编码器传递并通过解码器返回,生成原始图像的重建。

Expand Down Expand Up @@ -441,20 +441,20 @@ epsilon ~ N(0,I)
##### 示例 3-11. `Sampling`

```py
class Sampling(layers.Layer): ![1](img/1.png)
class Sampling(layers.Layer): #
def call(self, inputs):
z_mean, z_log_var = inputs
batch = tf.shape(z_mean)[0]
dim = tf.shape(z_mean)[1]
epsilon = K.random_normal(shape=(batch, dim))
return z_mean + tf.exp(0.5 * z_log_var) * epsilon ![2](img/2.png)
return z_mean + tf.exp(0.5 * z_log_var) * epsilon #
```

![1](img/#co_variational_autoencoders_CO4-1)

我们通过对 Keras 基础`Layer`类进行子类化来创建一个新层(请参阅“子类化 Layer 类”侧边栏)。

![2](img/#co_variational_autoencoders_CO4-2)

我们使用重参数化技巧(请参阅“重参数化技巧”侧边栏)来构建由`z_mean``z_log_var`参数化的正态分布的样本。

Expand All @@ -474,22 +474,22 @@ x = layers.Conv2D(128, (3, 3), strides=2, activation="relu", padding="same")(x)
shape_before_flattening = K.int_shape(x)[1:]

x = layers.Flatten()(x)
z_mean = layers.Dense(2, name="z_mean")(x) ![1](img/1.png)
z_mean = layers.Dense(2, name="z_mean")(x) #
z_log_var = layers.Dense(2, name="z_log_var")(x)
z = Sampling()([z_mean, z_log_var]) ![2](img/2.png)
z = Sampling()([z_mean, z_log_var]) #

encoder = models.Model(encoder_input, [z_mean, z_log_var, z], name="encoder") ![3](img/3.png)
encoder = models.Model(encoder_input, [z_mean, z_log_var, z], name="encoder") #
```

![1](img/#co_variational_autoencoders_CO5-1)

我们将`Flatten`层直接连接到 2D 潜在空间,而不是直接连接到`z_mean``z_log_var`层。

![2](img/#co_variational_autoencoders_CO5-2)

`Sampling`层从由参数`z_mean``z_log_var`定义的正态分布中对潜在空间中的点`z`进行采样。

![3](img/#co_variational_autoencoders_CO5-3)

定义编码器的 Keras `Model`——一个接受输入图像并输出`z_mean``z_log_var`和由这些参数定义的正态分布中的采样点`z`的模型。

Expand Down Expand Up @@ -563,28 +563,28 @@ class VAE(models.Model):
self.kl_loss_tracker,
]

def call(self, inputs): ![1](img/1.png)
def call(self, inputs): #
z_mean, z_log_var, z = encoder(inputs)
reconstruction = decoder(z)
return z_mean, z_log_var, reconstruction

def train_step(self, data): ![2](img/2.png)
def train_step(self, data): #
with tf.GradientTape() as tape:
z_mean, z_log_var, reconstruction = self(data)
reconstruction_loss = tf.reduce_mean(
500
* losses.binary_crossentropy(
data, reconstruction, axis=(1, 2, 3)
)
) ![3](img/3.png)
) #
kl_loss = tf.reduce_mean(
tf.reduce_sum(
-0.5
* (1 + z_log_var - tf.square(z_mean) - tf.exp(z_log_var)),
axis = 1,
)
)
total_loss = reconstruction_loss + kl_loss ![4](img/4.png)
total_loss = reconstruction_loss + kl_loss #

grads = tape.gradient(total_loss, self.trainable_weights)
self.optimizer.apply_gradients(zip(grads, self.trainable_weights))
Expand All @@ -604,19 +604,19 @@ vae.fit(
)
```

![1](img/#co_variational_autoencoders_CO6-1)

这个函数描述了我们希望在特定输入图像上返回的内容,我们称之为 VAE。

![2](img/#co_variational_autoencoders_CO6-2)

这个函数描述了 VAE 的一个训练步骤,包括损失函数的计算。

![3](img/#co_variational_autoencoders_CO6-3)

重建损失中使用了一个 beta 值为 500。

![4](img/#co_variational_autoencoders_CO6-4)

总损失是重建损失和 KL 散度损失的总和。

Expand Down Expand Up @@ -786,27 +786,27 @@ train_data = utils.image_dataset_from_directory(

```py
grid_width, grid_height = (10,3)
z_sample = np.random.normal(size=(grid_width * grid_height, 200)) ![1](img/1.png)
z_sample = np.random.normal(size=(grid_width * grid_height, 200)) #

reconstructions = decoder.predict(z_sample) ![2](img/2.png)
reconstructions = decoder.predict(z_sample) #

fig = plt.figure(figsize=(18, 5))
fig.subplots_adjust(hspace=0.4, wspace=0.4)
for i in range(grid_width * grid_height):
ax = fig.add_subplot(grid_height, grid_width, i + 1)
ax.axis("off")
ax.imshow(reconstructions[i, :, :]) ![3](img/3.png)
ax.imshow(reconstructions[i, :, :]) #
```

![1](img/#co_variational_autoencoders_CO7-1)

从具有 200 维度的标准多元正态分布中采样 30 个点。

![2](img/#co_variational_autoencoders_CO7-2)

解码采样点。

![3](img/#co_variational_autoencoders_CO7-3)

绘制图像!

Expand Down
Loading

0 comments on commit 9b8c1ee

Please sign in to comment.