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

回答編集履歴

1

期待に沿える形(DiscriminatorにLSTMを使用)ではないですが、コードを追加しました。

2020/06/16 15:43

投稿

tacanoviano
tacanoviano

スコア46

answer CHANGED
@@ -8,4 +8,80 @@
8
8
 
9
9
  私の知識不足ですか?
10
10
 
11
- [リンク内容](http://qiita.com/taku-buntu/items/0093a68bfae0b0ff879d)
11
+ [リンク内容](http://qiita.com/taku-buntu/items/0093a68bfae0b0ff879d)
12
+
13
+ 【追記0617】
14
+ LSTMを使うとdiscriminator は(2,5,1)の入力を求めてくるのですが
15
+ generatorが(2,5)の出力しか出せないので
16
+ (私の今の知識では)combinedモデルが出来なかったです。
17
+ discriminatorは時系列データを扱っていても、次のデータを予測するわけではなく本物か偽物かを判定するのが仕事なので、別のモデルを組み込んではどうか↓と思いました。
18
+ ```Python3
19
+ import tensorflow as tf
20
+ from keras.backend import tensorflow_backend
21
+
22
+ from tensorflow import keras
23
+ from tensorflow.keras.models import Sequential,Model
24
+ from tensorflow.keras.layers import Activation, Dense, Dropout, Flatten,Input,LSTM
25
+ from tensorflow.keras import backend as K
26
+ from tensorflow.keras.initializers import he_normal
27
+ from tensorflow.keras.optimizers import Adam
28
+
29
+ import os
30
+ import numpy as np
31
+
32
+
33
+ np.random.seed(0)
34
+ np.random.RandomState(0)
35
+ tf.set_random_seed(0)
36
+ config = tf.ConfigProto(gpu_options=tf.GPUOptions(allow_growth=True))
37
+ session = tf.Session(config=config)
38
+ tensorflow_backend.set_session(session)
39
+
40
+ n_data= 2
41
+ max_len = 7
42
+ dim_in = 3
43
+ dim_out = 5
44
+ dim_hidden = 11
45
+
46
+
47
+ def build_generator_l():
48
+ model = Sequential()
49
+ model.add(LSTM(dim_hidden,input_shape=(max_len,dim_in)))
50
+ model.add(Dropout(0.2))
51
+ model.add(Dense(dim_out*1))
52
+
53
+ # model.summary()
54
+
55
+ return model
56
+
57
+ def build_discriminator_l():
58
+ model = Sequential()
59
+ #model.add(LSTM(dim_hidden,input_shape=(dim_out,1),return_sequences=False))
60
+ model.add(Dense(dim_hidden,input_dim = dim_out , activation = 'relu'))
61
+ model.add(Dropout(0.2))
62
+ model.add(Dense(1))
63
+
64
+ # model.summary()
65
+
66
+ return model
67
+
68
+
69
+ ge= build_generator_l()#Generator
70
+
71
+ optimizer = Adam(lr=0.0002, beta_1=0.5)#Discriminator
72
+ dsc = build_discriminator_l()
73
+ dsc.compile(loss='binary_crossentropy', optimizer=optimizer, metrics=['accuracy'])
74
+
75
+ z = Input(shape=( max_len, dim_in))#combinedモデル
76
+ img = ge(z)
77
+ dsc.trainable = False
78
+ valid = dsc(img)
79
+ cmb = Model(z,valid)
80
+ cmb.compile(loss='binary_crossentropy', optimizer=optimizer)
81
+
82
+ noise = np.random.normal(0, 1, (n_data, max_len, dim_in))#Generatorへの入力
83
+ g_loss = cmb.train_on_batch(noise, np.ones((n_data, 1)))#Combinedモデルの学習(1バッチ)
84
+
85
+ print(g_loss)
86
+
87
+ ```