快捷搜索:  汽车  科技

jupyternotebook实现原理(Notebook并运行对抗神经网络)

jupyternotebook实现原理(Notebook并运行对抗神经网络)运行安装命令:source venv/bin/activate之前创建的虚拟环境中下面说一下安装的流程。建议在安装的时候进入之前创建的虚拟环境中安装,同时运行的时候也是在虚拟环境中运行,这样就可以直接使用tensorflow的环境了。进行环境:

在上一篇文章中已经介绍了在ubuntu20.04中安装了python3.8和tensorflow2.2.0,需要看的朋友可以到上文中观看:

https://www.toutiao.com/i6915983671610638859/

然而上文中只是安装了基本环境而已,要想更友好地开发python代码,还是要安装jupyter notebook,这样对代码运行结果的可视化会比较好。Jupyter Notebook是基于网页的用于交互计算的应用程序,其可被应用于全过程计算:开发、文档编写、运行代码和展示结果。官方文档为:

https://jupyter-notebook.readthedocs.io/en/stable/notebook.html

安装完成后如下图:

jupyternotebook实现原理(Notebook并运行对抗神经网络)(1)

本文为详细介绍怎么安装jupyter notebook,及运行一个对抗神经网络。

下面说一下安装的流程。

一、jupyter notebook安装(1)使用pip安装

建议在安装的时候进入之前创建的虚拟环境中安装,同时运行的时候也是在虚拟环境中运行,这样就可以直接使用tensorflow的环境了。

进行环境:

source venv/bin/activate

jupyternotebook实现原理(Notebook并运行对抗神经网络)(2)

之前创建的虚拟环境中

运行安装命令:

pip install jupyter

jupyternotebook实现原理(Notebook并运行对抗神经网络)(3)

安装中

jupyternotebook实现原理(Notebook并运行对抗神经网络)(4)

安装完成

如果安装失败可以执行如下升级

pip install --upgrade pip(2)运行jupyter notebook

注意:运行的时候也是在虚拟环境中运行,以便使用虚拟环境中的tensorflow软件包

jupyter notebook

jupyternotebook实现原理(Notebook并运行对抗神经网络)(5)

运行成功

在运行成功的图里可以知道,是会自动打开了一个页面:

http://localhost:8888/tree?#running

jupyternotebook实现原理(Notebook并运行对抗神经网络)(6)

运行页面

这个时候就可以在右上角新建,进行写代码了。

二、运行对抗神经网络

生成对抗网络(GANs)是当今计算机科学领域最有趣的想法之一。两个模型通过对抗过程同时训练。一个生成器(“艺术家”)学习创造看起来真实的图像,而判别器(“艺术评论家”)学习区分真假图像。可以在官网看具体的详细,如下:

https://tensorflow.google.cn/tutorials/generative/dcgan

下面是我运行的一个结果,只是运行了5次而已。

jupyternotebook实现原理(Notebook并运行对抗神经网络)(7)

对抗神经网络生成字体

先新建一个GANs.ipynb文件,在里面填入相关的内容就可以了。

jupyternotebook实现原理(Notebook并运行对抗神经网络)(8)

GANs.ipynb文件

具体的内容可以在tensorflow的官网可以看到。

当然大家想看我的也是可以的,我导出来了如下,内容比较多,不想看的,可以跳过:

#!/usr/bin/env python # coding: utf-8 # In[1]: import tensorflow as tf # In[2]: tf.__version__ # In[3]: import glob import imageio import matplotlib.pyplot as plt import numpy as np import os import PIL from tensorflow.keras import layers import time from IPython import display # In[4]: (train_images train_lables) (_ _) = tf.keras.datasets.mnist.load_data() # In[5]: train_images.shape # In[6]: train_images = train_images.reshape(train_images.shape[0] 28 28 1).astype('float32') train_images = (train_images - 127.5) / 127.5 # 将图片标准化到 [-1 1] 区间内 # In[7]: BUFFER_SIZE = 60000 BATCH_SIZE = 256 # In[8]: # 批量化和打乱数据 train_dataset = tf.data.Dataset.from_tensor_slices(train_images).shuffle(BUFFER_SIZE).batch(BATCH_SIZE) # In[9]: def make_generator_model(): model = tf.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) # 注意:batch size 没有限制 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 # In[10]: generator = make_generator_model() noise = tf.random.normal([1 100]) generated_image = generator(noise training=False) plt.imshow(generated_image[0 : : 0] cmap='gray') # In[11]: def make_discriminator_model(): model = tf.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 # In[12]: discriminator = make_discriminator_model() decision = discriminator(generated_image) print (decision) # In[13]: # 该方法返回计算交叉熵损失的辅助函数 cross_entropy = tf.keras.losses.BinaryCrossentropy(from_logits=True) # In[14]: 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 # In[15]: def generator_loss(fake_output): return cross_entropy(tf.ones_like(fake_output) fake_output) # In[16]: generator_optimizer = tf.keras.optimizers.Adam(1e-4) discriminator_optimizer = tf.keras.optimizers.Adam(1e-4) # In[17]: checkpoint_dir = './training_checkpoints' checkpoint_prefix = os.path.join(checkpoint_dir "ckpt") checkpoint = tf.train.Checkpoint(generator_optimizer=generator_optimizer discriminator_optimizer=discriminator_optimizer generator=generator discriminator=discriminator) # In[29]: EPOCHS = 50 noise_dim = 100 num_examples_to_generate = 16 # 我们将重复使用该种子(因此在动画 GIF 中更容易可视化进度) seed = tf.random.normal([num_examples_to_generate noise_dim]) # In[30]: # 注意 `tf.function` 的使用 # 该注解使函数被“编译” @tf.function def train_step(images): noise = tf.random.normal([BATCH_SIZE noise_dim]) 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)) # In[31]: def train(dataset epochs): for epoch in range(epochs): start = time.time() for image_batch in dataset: train_step(image_batch) # 继续进行时为 GIF 生成图像 display.clear_output(wait=True) generate_and_save_images(generator epoch 1 seed) # 每 15 个 epoch 保存一次模型 if (epoch 1) % 15 == 0: checkpoint.save(file_prefix = checkpoint_prefix) print ('Time for epoch {} is {} sec'.format(epoch 1 time.time()-start)) # 最后一个 epoch 结束后生成图片 display.clear_output(wait=True) generate_and_save_images(generator epochs seed) # In[32]: def generate_and_save_images(model epoch test_input): # 注意 training` 设定为 False # 因此,所有层都在推理模式下运行(batchnorm)。 predictions = model(test_input training=False) fig = plt.figure(figsize=(4 4)) for i in range(predictions.shape[0]): plt.subplot(4 4 i 1) plt.imshow(predictions[i : : 0] * 127.5 127.5 cmap='gray') plt.axis('off') plt.savefig('image_at_epoch_{:04d}.png'.format(epoch)) plt.show() # 调用上面定义的 train() 方法来同时训练生成器和判别器。注意,训练 GANs 可能是棘手的。 # 重要的是,生成器和判别器不能够互相压制对方(例如,他们以相似的学习率训练)。 # 在训练之初,生成的图片看起来像是随机噪声。随着训练过程的进行,生成的数字将越来越真实。 # 在大概 50 个 epoch 之后,这些图片看起来像是 MNIST 数字。使用 Colab 中的默认设置可能需要大约 1 分钟每 epoch。 # In[ ]: get_ipython().run_cell_magic('time' '' 'train(train_dataset EPOCHS)') # In[ ]: checkpoint.restore(tf.train.latest_checkpoint(checkpoint_dir)) # In[ ]: # 使用 epoch 数生成单张图片 def display_image(epoch_no): return PIL.Image.open('image_at_epoch_{:04d}.png'.format(epoch_no)) # In[ ]: display_image(EPOCHS) # In[ ]: anim_file = 'dcgan.gif' with imageio.get_writer(anim_file mode='I') as writer: filenames = glob.glob('image*.png') filenames = sorted(filenames) last = -1 for i filename in enumerate(filenames): frame = 2*(i**0.5) if round(frame) > round(last): last = frame else: continue image = imageio.imread(filename) writer.append_data(image) image = imageio.imread(filename) writer.append_data(image) import IPython if IPython.version_info > (6 2 0 ''): display.Image(filename=anim_file) # In[ ]: try: from google.colab import files except ImportError: pass else: files.download(anim_file) # In[ ]: # In[ ]:

本文的介绍已完。如需要更多深度学习的东西 ,可以在评论区,留言给我。多谢大家花时间观看!

猜您喜欢: