teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

2

コードを追記しました

2021/06/12 12:13

投稿

tkrd
tkrd

スコア5

title CHANGED
File without changes
body CHANGED
@@ -12,4 +12,129 @@
12
12
  よろしくお願いいたします。
13
13
 
14
14
  anaconda等の導入のための参考サイト↓
15
- https://qiita.com/komiya_____/items/96c14485eb035701e218
15
+ https://qiita.com/komiya_____/items/96c14485eb035701e218
16
+
17
+
18
+
19
+ 追記(コード群)
20
+
21
+ dockerfile, docker-compose.yml, mnist.pyのコードを追記しました。mnist.pyはKeras Blogのものをほぼそのまま使ったものになります。また、有用な情報となるかわかりませんが、Dockerの環境構築は以下の記事を参考にしました。(ubuntuのバージョンは記事に合わせて18.04にしてあります)
22
+
23
+ 参考記事:https://qiita.com/karaage0703/items/e79a8ad2f57abc6872aa
24
+ Keras Blog:https://blog.keras.io/building-autoencoders-in-keras.html
25
+
26
+ ```Dockerfile
27
+ # ベースイメージ名:タグ名
28
+ FROM continuumio/anaconda3:2019.03
29
+
30
+ # pipをアップグレードし必要なパッケージをインストール
31
+ RUN pip install --upgrade pip && \
32
+ pip install autopep8 && \
33
+ pip install Keras && \
34
+ pip install tensorflow
35
+
36
+ # コンテナ側のルート直下にworkdir/(任意)という名前の作業ディレクトリを作り移動する
37
+ WORKDIR /workdir
38
+
39
+ # コンテナ側のリッスンポート番号
40
+ # 明示しているだけで、なくても動く
41
+ EXPOSE 8888
42
+
43
+ # ENTRYPOINT命令はコンテナ起動時に実行するコマンドを指定(基本docker runの時に上書きしないもの)
44
+ # "jupyter-lab" => jupyter-lab立ち上げコマンド
45
+ # "--ip=0.0.0.0" => ip制限なし
46
+ # "--port=8888" => EXPOSE命令で書いたポート番号と合わせる
47
+ # ”--no-browser” => ブラウザを立ち上げない。コンテナ側にはブラウザがないので 。
48
+ # "--allow-root" => rootユーザーの許可。セキュリティ的には良くないので、自分で使うときだけ。
49
+ # "--NotebookApp.token=''" => トークンなしで起動許可。これもセキュリティ的には良くない。
50
+ ENTRYPOINT ["jupyter-lab", "--ip=0.0.0.0", "--port=8888", "--no-browser", "--allow-root", "--NotebookApp.token=''"]
51
+
52
+ # CMD命令はコンテナ起動時に実行するコマンドを指定(docker runの時に上書きする可能性のあるもの)
53
+ # "--notebook-dir=/workdir" => Jupyter Labのルートとなるディレクトリを指定
54
+ CMD ["--notebook-dir=/workdir"]
55
+
56
+
57
+ ```
58
+
59
+ ```yaml
60
+ version: '3' # docker-composeファイルの書式バージョン。最新の’3’を指定(2021/6/12現在)
61
+ services:
62
+ dev: # 任意の名前(ディレクトリ名 + dev がコンテナ名となります)
63
+ build:
64
+ context: .
65
+ dockerfile: Dockerfile_study
66
+ image: study
67
+ ports:
68
+ - "8080:8888"
69
+ volumes:
70
+ - .:/workdir
71
+
72
+ ```
73
+
74
+ ```Python
75
+ from keras.layers import Input, Dense
76
+ from keras.models import Model
77
+ from keras.datasets import mnist
78
+ import numpy as np
79
+ from sklearn.model_selection import train_test_split
80
+ import matplotlib.pyplot as plt
81
+
82
+ # encoderの次元
83
+ encoding_dim = 32
84
+
85
+ # 入力用の変数
86
+ input_img = Input(shape=(784, ))
87
+ # 入力された画像がencodeされたものを格納する変数
88
+ encoded = Dense(encoding_dim, activation='relu')(input_img)
89
+ # ecnodeされたデータを再構成した画像を格納する変数
90
+ decoded = Dense(784, activation='sigmoid')(encoded)
91
+ # 入力画像を再構成するModelとして定義
92
+ autoencoder = Model(input_img, decoded)
93
+
94
+ # 入力する画像をencodeする部分
95
+ encoder = Model(input_img, encoded)
96
+ encoded_input = Input(shape=(encoding_dim, ))
97
+ decoder_layer = autoencoder.layers[-1]
98
+ # encodeされた画像データを再構成する部分
99
+ decoder = Model(encoded_input, decoder_layer(encoded_input))
100
+
101
+ # AdaDeltaで最適化, loss関数はbinary_crossentropy
102
+ autoencoder.compile(optimizer='adam', loss='binary_crossentropy')
103
+
104
+ # MNISTデータを前処理する
105
+ (x_train, _), (x_test, _) = mnist.load_data()
106
+ x_train, x_valid = train_test_split(x_train, test_size=0.175)
107
+ x_train = x_train.astype('float32')/255.
108
+ x_valid = x_valid.astype('float32')/255.
109
+ x_test = x_test.astype('float32')/255.
110
+ x_train = x_train.reshape((len(x_train), np.prod(x_train.shape[1:])))
111
+ x_valid = x_valid.reshape((len(x_valid), np.prod(x_valid.shape[1:])))
112
+ x_test = x_test.reshape((len(x_test), np.prod(x_test.shape[1:])))
113
+
114
+ # autoencoderの実行
115
+ autoencoder.fit(x_train, x_train,
116
+ epochs=50,
117
+ batch_size=256,
118
+ shuffle=True,
119
+ validation_data=(x_valid, x_valid))
120
+
121
+ # 画像化して確認
122
+ encoded_img = encoder.predict(x_test)
123
+ decoded_img = decoder.predict(encoded_img)
124
+
125
+ n = 10
126
+ plt.figure(figsize=(20, 4))
127
+ for i in range(n):
128
+ ax = plt.subplot(2, n, i+1)
129
+ plt.imshow(x_test[i].reshape(28, 28))
130
+ plt.gray()
131
+ ax.get_xaxis().set_visible(False)
132
+ ax.get_yaxis().set_visible(False)
133
+
134
+ ax = plt.subplot(2, n, i+1+n)
135
+ plt.imshow(decoded_img[i].reshape(28, 28))
136
+ plt.gray()
137
+ ax.get_xaxis().set_visible(False)
138
+ ax.get_yaxis().set_visible(False)
139
+ plt.show()
140
+ ```

1

キャプチャを追加しました。

2021/06/12 12:13

投稿

tkrd
tkrd

スコア5

title CHANGED
File without changes
body CHANGED
@@ -6,6 +6,9 @@
6
6
  VScodeのキャプチャです。
7
7
  ![イメージ説明](92fdf2311c82da323f8744151f42513f.png)
8
8
 
9
+ VScodeのポートのキャプチャです。
10
+ ![イメージ説明](7e5362bdd7dcc2b7b55dc70e24ee0c67.png)
11
+
9
12
  よろしくお願いいたします。
10
13
 
11
14
  anaconda等の導入のための参考サイト↓