keras中的断言错误
Assertion Error in keras
我正在尝试在 keras 中编写 GAN,但在 运行 时出现此断言错误。经过搜索我发现问题的最可能原因是旧版本的theano。我将 theano 更新到最新的 github 开发版本 0.9.0beta1 但我仍然遇到同样的错误。
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
我认为这是你代码中的错字...请将生成器的最后一层更改为:
G.add(Dense(1, activation='sigmoid'))
至:
G.add(Dense(100, activation='sigmoid'))
我猜你不希望你的生成器只产生 1 个像素,因为你的鉴别器需要 100 个输入。
错误来自于您的第一个模型输出形状为 (batch_size, 1)
的张量,而您的第二个模型输入的输入形状为 (batch_size, 100)
。因此断言错误。
它现在正在我的笔记本电脑上编译。
我正在尝试在 keras 中编写 GAN,但在 运行 时出现此断言错误。经过搜索我发现问题的最可能原因是旧版本的theano。我将 theano 更新到最新的 github 开发版本 0.9.0beta1 但我仍然遇到同样的错误。
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
我认为这是你代码中的错字...请将生成器的最后一层更改为:
G.add(Dense(1, activation='sigmoid'))
至:
G.add(Dense(100, activation='sigmoid'))
我猜你不希望你的生成器只产生 1 个像素,因为你的鉴别器需要 100 个输入。
错误来自于您的第一个模型输出形状为 (batch_size, 1)
的张量,而您的第二个模型输入的输入形状为 (batch_size, 100)
。因此断言错误。
它现在正在我的笔记本电脑上编译。