Keras 维度不兼容
Keras Dimension Incompatibility
我想在 Keras 中编写一个简单的变分自动编码器。因为它的变体,我必须为编码器使用功能 API 。但是,它给了我一个尺寸不匹配错误,我不知道为什么。这是我的代码和错误:
def sampling(args):
z_mean, z_log_var = args
epsilon = K.random_normal(shape=(100,2),
mean=0., stddev=1)
return z_mean + K.exp(z_log_var) * epsilon
def testFcn():
K.clear_session()
# Create the input
inPut = Input(shape=(3,))
# Encoder Layers
xEnc = Dense(128, input_shape=(3,), activation='relu')(inPut)
xEnc = Dense(64, activation='relu')(xEnc)
xEnc = Dense(32, activation='relu')(xEnc)
# Distribution Embedding
z_mean = Dense(2, activation='relu')(xEnc)
z_log_var = Dense(2, activation='relu')(xEnc)
z = Lambda(sampling, output_shape=(2,))([z_mean, z_log_var])
# Tying together the model
encoder = Model(inPut, z, name='encoder')
print("\n Encoder Model")
encoder.summary()
return encoder
# Create some random data
X = np.random.multivariate_normal([0]*3,np.eye(3),size=(100))
# Create the model
encoder = testFcn()
# predict
encoder.predict(X)
这给了我以下错误:
InvalidArgumentError: 2 root error(s) found.
(0) Invalid argument: Incompatible shapes: [32,2] vs. [100,2]
[[{{node lambda_1/mul}}]]
(1) Invalid argument: Incompatible shapes: [32,2] vs. [100,2]
[[{{node lambda_1/mul}}]]
[[lambda_1/add/_23]]
0 successful operations.
0 derived errors ignored.
非常感谢您的帮助。
这可能会为您指明正确的方向 - 我通过添加 batch_size:
的修改获得了成功
encoder.predict(X, batch_size=100)
默认是32,这显然和你的设计有冲突。此处有更多详细信息:https://keras.io/models/model/#predict
希望对您有所帮助。
我想在 Keras 中编写一个简单的变分自动编码器。因为它的变体,我必须为编码器使用功能 API 。但是,它给了我一个尺寸不匹配错误,我不知道为什么。这是我的代码和错误:
def sampling(args):
z_mean, z_log_var = args
epsilon = K.random_normal(shape=(100,2),
mean=0., stddev=1)
return z_mean + K.exp(z_log_var) * epsilon
def testFcn():
K.clear_session()
# Create the input
inPut = Input(shape=(3,))
# Encoder Layers
xEnc = Dense(128, input_shape=(3,), activation='relu')(inPut)
xEnc = Dense(64, activation='relu')(xEnc)
xEnc = Dense(32, activation='relu')(xEnc)
# Distribution Embedding
z_mean = Dense(2, activation='relu')(xEnc)
z_log_var = Dense(2, activation='relu')(xEnc)
z = Lambda(sampling, output_shape=(2,))([z_mean, z_log_var])
# Tying together the model
encoder = Model(inPut, z, name='encoder')
print("\n Encoder Model")
encoder.summary()
return encoder
# Create some random data
X = np.random.multivariate_normal([0]*3,np.eye(3),size=(100))
# Create the model
encoder = testFcn()
# predict
encoder.predict(X)
这给了我以下错误:
InvalidArgumentError: 2 root error(s) found.
(0) Invalid argument: Incompatible shapes: [32,2] vs. [100,2]
[[{{node lambda_1/mul}}]]
(1) Invalid argument: Incompatible shapes: [32,2] vs. [100,2]
[[{{node lambda_1/mul}}]]
[[lambda_1/add/_23]]
0 successful operations.
0 derived errors ignored.
非常感谢您的帮助。
这可能会为您指明正确的方向 - 我通过添加 batch_size:
的修改获得了成功encoder.predict(X, batch_size=100)
默认是32,这显然和你的设计有冲突。此处有更多详细信息:https://keras.io/models/model/#predict
希望对您有所帮助。