2017-02-19 18 views
1

ケラスでGANを書こうとしていますが、実行中にこのアサーションエラーが発生しています。検索した後、私は問題の最も可能性の高い原因が古いバージョンのtheanoであることを発見しました。私はtheanoを最新のgithub開発版0.9.0beta1にアップデートしましたが、それでも同じエラーが発生しています。にケラスのアサーションエラー

G.add(Dense(1, activation='sigmoid')) 

from keras.models import Sequential 
from keras.layers import Dense, Activation, Dropout 
from keras.optimizers import SGD 

print "Setting up decoder" 
D = Sequential() 
D.add(Dense(100, input_dim=100, activation='relu')) 
D.add(Dropout(0.5)) 
D.add(Dense(50, activation='relu')) 
D.add(Dropout(0.5)) 
D.add(Dense(1, activation='sigmoid')) 
sgd = SGD(lr=0.01, momentum=0.1) 
D.compile(loss='binary_crossentropy', optimizer=sgd) 

print "Setting up generator" 
G = Sequential() 
G.add(Dense(1, input_dim=1, activation='relu')) 
G.add(Dropout(0.5)) 
G.add(Dense(50, activation='relu')) 
G.add(Dropout(0.5)) 
G.add(Dense(1, activation='sigmoid')) 
sgd = SGD(lr=0.01, momentum=0.1) 
G.compile(loss='binary_crossentropy', optimizer=sgd) 

print "Setting up combined net" 
gen_dec = Sequential() 
gen_dec.add(G) 
D.trainable=False 
gen_dec.add(D) 
gen_dec.compile(loss='binary_crossentropy', optimizer=sgd) 
gen_dec.summary() 

問題は、私はそれはあなたのコードのタイプミスだと思うgen_dec.add(D)

assert input_shape[-1] and input_shape[-1] == self.input_dim 
AssertionError 
+0

アサーションエラーは何ですか?あなたはあなたの質問にそれを含めていませんでした。 –

答えて

1

このセクションで起こる...から発電機の最後の層を変更してください。 :

G.add(Dense(100, activation='sigmoid')) 

あなたの弁別器が100の入力を取っているので、ジェネレータが1ピクセルしか生成しないと思うでしょう。

エラーは、最初のモデルがテクスチャ(batch_size, 1)を出力し、2番目のモデルの入力が(batch_size, 100)の入力シェイプをとるという事実に起因します。したがって、アサートエラーです。

今、ノートパソコンにコンパイルされています。

+0

私はこのpytorchコードをkerasに移植しようとしています。https://github.com/devnag/pytorch-generative-adversarial-networks/blob/master/gan_pytorch.py​​ここでは、作成者は1つの入力サイズを使用し、入力サイズは100弁別器。 – Eka

+0

Imは入力ではなく発電機の出力をここで話しています。 –

+0

そのコードでは、データを生成するためにいくつかの関数を使用します。コードのpreprocess関数を参照してください。あなたはアルゴリズムをコピーすることはできませんし、そのようないくつかの部分をスキップ:)修正imは –

関連する問題