Updated 19/Nov/2021 by Yoshihisa Nitta
#! pip install tensorflow==2.7.0
%tensorflow_version 2.x
import tensorflow as tf
print(tf.__version__)
! nvidia-smi
! cat /proc/cpuinfo
! cat /etc/issue
! free -h
from google.colab import drive
drive.mount('/content/drive')
! ls /content/drive
Basically, gdown
from Google Drive. Download from nw.tsuda.ac.jp above only if the specifications of Google Drive change and you cannot download from Google Drive.
基本的に Google Drive から gdown
してください。 Google Drive の仕様が変わってダウンロードができない場合にのみ、nw.tsuda.ac.jp からダウンロードしてください。
# Download source file
nw_path = './nw'
! rm -rf {nw_path}
! mkdir -p {nw_path}
if True: # from Google Drive
url_model = 'https://drive.google.com/uc?id=1ZDgWE7wmVwG_ZuQVUjuh_XHeIO-7Yn63'
! (cd {nw_path}; gdown {url_model})
else: # from nw.tsuda.ac.jp
URL_NW = 'https://nw.tsuda.ac.jp/lec/GoogleColab/pub'
url_model = f'{URL_NW}/models/AutoEncoder.py'
! wget -nd {url_model} -P {nw_path} # download to './nw/AutoEncoder.py'
! cat {nw_path}/AutoEncoder.py
import tensorflow as tf
import numpy as np
# MNIST datasets
(x_train_raw, y_train_raw), (x_test_raw, y_test_raw) = tf.keras.datasets.mnist.load_data()
print(x_train_raw.shape)
print(y_train_raw.shape)
print(x_test_raw.shape)
print(y_test_raw.shape)
x_train = x_train_raw.reshape(x_train_raw.shape+(1,)).astype('float32') / 255.0
x_test = x_test_raw.reshape(x_test_raw.shape+(1,)).astype('float32') / 255.0
print(x_train.shape)
print(x_test.shape)
Load the Neural Network Model trained in the AE_MNIST_Train.ipynb.
The definition of AutoEncoder
class is downloaded from nw.tsuda.ac.jp.
AE_MNIST_Train.ipynb で学習したニューラルネットワーク・モデルをロードする。
AutoEncoder
クラスの定義は nw.tsuda.ac.jp からダウンロードした。
save_path1 = '/content/drive/MyDrive/ColabRun/AE01'
save_path2 = '/content/drive/MyDrive/ColabRun/AE02'
save_path3 = '/content/drive/MyDrive/ColabRun/AE03'
from nw.AutoEncoder import AutoEncoder
AE = AutoEncoder.load(save_path3)
print(AE.epoch)
# Load the AutoEncoder object of the specified epoch.
# 保存したAutoEncoderクラスのうち、指定したepochのオブジェクトをロードする。
AE_young = AutoEncoder.load(save_path3, 3)
print(AE_young.epoch)
n_to_show = len(x_test)
example_idx = np.random.choice(range(len(x_test)), n_to_show)
example_images = x_test[example_idx]
example_labels = y_test_raw[example_idx]
z_points = AE.encoder.predict(example_images)
min_x = min(z_points[:, 0])
max_x = max(z_points[:, 0])
min_y = min(z_points[:, 1])
max_y = max(z_points[:, 1])
%matplotlib inline
import matplotlib.pyplot as plt
fig, ax = plt.subplots(1, 1, figsize=(12, 12))
map = ax.scatter(z_points[:, 0], z_points[:, 1], c=example_labels, cmap='rainbow', alpha=0.5, s=2)
plt.colorbar(map)
plt.show()
# Display 30 images as points in the latent space.
# 30 枚の画像を潜在空間の点として表示する。
import numpy as np
table_row = 10
table_line = 3
x = np.random.uniform(min_x, max_x, size=table_line * table_row)
y = np.random.uniform(min_y, max_y, size=table_line * table_row)
z_grid = np.array(list(zip(x,y))) # (x, y) : 2D coordinates
reconst = AE.decoder.predict(z_grid)
%matplotlib inline
import matplotlib.pyplot as plt
fig, ax = plt.subplots(1, 1, figsize=(12, 12))
map = ax.scatter(z_points[:, 0], z_points[:, 1], c=example_labels, cmap='rainbow', alpha=0.5, s=2)
ax.scatter(z_grid[:,0], z_grid[:,1], c='red', alpha=1, s=20)
for i in range(len(z_grid)):
ax.text(z_grid[i][0], z_grid[i][1], str(i))
plt.colorbar(map)
plt.show()
# Display the 30 original images selected as samples.
# サンプルとして選んだ30枚の元画像を表示する
%matplotlib inline
import matplotlib.pyplot as plt
VSKIP=0.5 # vertical space between subplots
fig, ax = plt.subplots(table_line, table_row, figsize=(2.8 * table_row, 2.8 * table_line * (1+VSKIP)))
plt.subplots_adjust(hspace = VSKIP)
for y in range(table_line):
for x in range(table_row):
idx = table_row * y + x
img = reconst[idx].squeeze()
ax[y][x].imshow(img, cmap='gray')
ax[y][x].text(0.5, -0.35, f'{idx} ({z_grid[idx][0]:.2f}, {z_grid[idx][1]:.2f})', fontsize=16, ha='center', transform=ax[y][x].transAxes)
ax[y][x].axis('off')
plt.show()
Generate images from points on 20x20 grid. The generated images are displayed as a table with 20 rows and 20 columns.
20×20 のグリッドから、画像を生成する。 生成した画像は 20 行 20列の表として表示する。
import numpy as np
n_grid = 20
x = np.linspace(min_x, max_x, n_grid)
y = np.linspace(min_y, max_y, n_grid)
xv, yv = np.meshgrid(x, y)
xv = xv.flatten()
yv = yv.flatten()
z_grid2 = np.array(list(zip(xv, yv)))
reconst2 = AE.decoder.predict(z_grid2)
%matplotlib inline
import matplotlib.pyplot as plt
fig, ax = plt.subplots(n_grid, n_grid, figsize=(n_grid, n_grid))
for i in range(len(reconst2)):
img = reconst2[i].squeeze()
line = n_grid - 1 - i // n_grid
row = i % n_grid
ax[line][row].imshow(img, cmap='gray')
ax[line][row].axis('off')
plt.show()
%matplotlib inline
import matplotlib.pyplot as plt
fig, ax = plt.subplots(1, 1, figsize=(12, 12))
# Encoded 10000 test images for x_test. The points are color-coded with the correct label.
# x_test の10000 個のテスト用画像をエンコードした点。点は正解ラベルで色分けした。
map = ax.scatter(z_points[:, 0], z_points[:, 1], c=example_labels, cmap='rainbow', alpha=0.5, s=2)
# Display the grid as black dots.
# グリッドを黒点として表示する。
ax.scatter(z_grid2[:, 0], z_grid2[:, 1], c='black', alpha=1, s=20)
plt.colorbar(map) # plt.colorbar() だとエラーになるので注意。pltに対して描画していない場合は、colorbar()の引数にMappableを指定する必要がある。
plt.show()