質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

PyTorch

PyTorchは、オープンソースのPython向けの機械学習ライブラリ。Facebookの人工知能研究グループが開発を主導しています。強力なGPUサポートを備えたテンソル計算、テープベースの自動微分による柔軟なニューラルネットワークの記述が可能です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

0回答

271閲覧

自分が集めた画像でVAEを実装したい

VAE_

総合スコア0

Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

PyTorch

PyTorchは、オープンソースのPython向けの機械学習ライブラリ。Facebookの人工知能研究グループが開発を主導しています。強力なGPUサポートを備えたテンソル計算、テープベースの自動微分による柔軟なニューラルネットワークの記述が可能です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2022/06/21 05:54

編集2022/06/21 06:07

現在VAEについて勉強中であり、https://kagglenote.com/ml-tips/keras-vae/
この方のコードを参考にプログラムを動かしています。
このプログラムを用意されているMNIST画像ではなく自分で用意した1028×1028の画像を保存したフォルダーの中身で学習をさせたいのですがどのように変えたら良いかがわかりません。データの訓練の部分でファイルを読み込み、訓練データとテストデータにそれを渡せば良いと思うのですがpythonおよびプログラムをあまり触ったことがないため具体的なコードの変更の仕方がわからないのでアドバイスを頂きたいです。

python

1 2import numpy as np 3import tensorflow as tf 4from tensorflow import keras 5from tensorflow.keras import layers 6import matplotlib.pyplot as plt 7 8 9class Sampling(layers.Layer): 10 def call(self, inputs): 11 z_mean, z_log_var = inputs 12 batch = tf.shape(z_mean)[0] 13 dim = tf.shape(z_mean)[1] 14 epsilon = tf.keras.backend.random_normal(shape=(batch, dim)) 15 return z_mean + tf.exp(0.5 * z_log_var) * epsilon 16 17 18# encoder 19latent_dim = 2 20 21encoder_inputs = keras.Input(shape=(28, 28, 1)) 22x = layers.Conv2D(32, 3, activation="relu", strides=2, padding="same")(encoder_inputs) 23x = layers.Conv2D(64, 3, activation="relu", strides=2, padding="same")(x) 24x = layers.Flatten()(x) 25x = layers.Dense(16, activation="relu")(x) 26z_mean = layers.Dense(latent_dim, name="z_mean")(x) 27z_log_var = layers.Dense(latent_dim, name="z_log_var")(x) 28z = Sampling()([z_mean, z_log_var]) 29encoder = keras.Model(encoder_inputs, [z_mean, z_log_var, z], name="encoder") 30encoder.summary() 31 32 33# decoder 34latent_inputs = keras.Input(shape=(latent_dim,)) 35x = layers.Dense(7 * 7 * 64, activation="relu")(latent_inputs) 36x = layers.Reshape((7, 7, 64))(x) 37x = layers.Conv2DTranspose(64, 3, activation="relu", strides=2, padding="same")(x) 38x = layers.Conv2DTranspose(32, 3, activation="relu", strides=2, padding="same")(x) 39decoder_outputs = layers.Conv2DTranspose(1, 3, activation="sigmoid", padding="same")(x) 40decoder = keras.Model(latent_inputs, decoder_outputs, name="decoder") 41decoder.summary() 42 43 44# buiild vae 45class VAE(keras.Model): 46 def __init__(self, encoder, decoder, **kwargs): 47 super(VAE, self).__init__(**kwargs) 48 self.encoder = encoder 49 self.decoder = decoder 50 self.total_loss_tracker = keras.metrics.Mean(name="total_loss") 51 self.reconstruction_loss_tracker = keras.metrics.Mean(name="reconstruction_loss") 52 self.kl_loss_tracker = keras.metrics.Mean(name="kl_loss") 53 54 @property 55 def metrics(self): 56 return [ 57 self.total_loss_tracker, 58 self.reconstruction_loss_tracker, 59 self.kl_loss_tracker, 60 ] 61 62 def predict(self, x): 63 z_mean, _, _ = self.encoder.predict(x) 64 y = self.decoder.predict(z_mean) 65 return y 66 67 def train_step(self, data): 68 with tf.GradientTape() as tape: 69 z_mean, z_log_var, z = self.encoder(data) 70 reconstruction = self.decoder(z) 71 reconstruction_loss = tf.reduce_mean( 72 tf.reduce_sum( 73 keras.losses.binary_crossentropy(data, reconstruction), axis=(1, 2) 74 ) 75 ) 76 kl_loss = -0.5 * (1 + z_log_var - tf.square(z_mean) - tf.exp(z_log_var)) 77 kl_loss = tf.reduce_mean(tf.reduce_sum(kl_loss, axis=1)) 78 total_loss = reconstruction_loss + kl_loss 79 grads = tape.gradient(total_loss, self.trainable_weights) 80 self.optimizer.apply_gradients(zip(grads, self.trainable_weights)) 81 self.total_loss_tracker.update_state(total_loss) 82 self.reconstruction_loss_tracker.update_state(reconstruction_loss) 83 self.kl_loss_tracker.update_state(kl_loss) 84 return { 85 "loss": self.total_loss_tracker.result(), 86 "reconstruction_loss": self.reconstruction_loss_tracker.result(), 87 "kl_loss": self.kl_loss_tracker.result(), 88 } 89 90 91# train 92(x_train, _), (x_test, _) = keras.datasets.mnist.load_data() 93mnist_digits = np.concatenate([x_train, x_test], axis=0) 94mnist_digits = np.expand_dims(mnist_digits, -1).astype("float32") / 255 95 96 97vae = VAE(encoder, decoder) 98vae.compile(optimizer=keras.optimizers.Adam()) 99history = vae.fit(mnist_digits, epochs=30, batch_size=128) 100vae.save_weights("vae.h5") 101 102 103# plot result 104row = 1 105col = 3 106fig, ax = plt.subplots(row, col, figsize=(15,4)) 107ax[0].plot(history.history["loss"]) 108ax[0].set_ylabel('loss') 109ax[0].set_xlabel('epoch') 110ax[1].plot(history.history["reconstruction_loss"]) 111ax[1].set_ylabel('reconstruction_loss') 112ax[1].set_xlabel('epoch') 113ax[2].plot(history.history["kl_loss"]) 114ax[2].set_ylabel('kl_loss') 115ax[2].set_xlabel('epoch') 116plt.show() 117 118# load 119vae = VAE(encoder, decoder) 120vae.compile(optimizer=keras.optimizers.Adam()) 121vae.built = True 122vae.load_weights("vae.h5") 123 124 125index = 200 126x = mnist_digits[index] 127x = np.expand_dims(x, 0) 128x_decode = vae.predict(x) 129row = 1 130col = 2 131fig, ax = plt.subplots(row, col, figsize=(10,4)) 132ax[0].imshow(x[0], cmap="Greys_r") 133ax[0].set_title('raw') 134ax[1].imshow(x_decode[0], cmap="Greys_r") 135ax[1].set_title('result') 136plt.show() 137 138# display grids 139def plot_latent_space(vae, n=30, figsize=15): 140 digit_size = 28 141 scale = 1.0 142 figure = np.zeros((digit_size * n, digit_size * n)) 143 grid_x = np.linspace(-scale, scale, n) 144 grid_y = np.linspace(-scale, scale, n)[::-1] 145 146 for i, yi in enumerate(grid_y): 147 for j, xi in enumerate(grid_x): 148 z_sample = np.array([[xi, yi]]) 149 x_decoded = vae.decoder.predict(z_sample) 150 digit = x_decoded[0].reshape(digit_size, digit_size) 151 figure[ 152 i * digit_size : (i + 1) * digit_size, 153 j * digit_size : (j + 1) * digit_size, 154 ] = digit 155 156 plt.figure(figsize=(figsize, figsize)) 157 start_range = digit_size // 2 158 end_range = n * digit_size + start_range 159 pixel_range = np.arange(start_range, end_range, digit_size) 160 sample_range_x = np.round(grid_x, 1) 161 sample_range_y = np.round(grid_y, 1) 162 plt.xticks(pixel_range, sample_range_x) 163 plt.yticks(pixel_range, sample_range_y) 164 plt.xlabel("z[0]") 165 plt.ylabel("z[1]") 166 plt.imshow(figure, cmap="Greys_r") 167 plt.show() 168 169plot_latent_space(vae) 170 171```python

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問