【发布时间】:2020-06-05 12:32:03
【问题描述】:
我正在尝试在 keras 中训练一个神经网络,但我得到的错误是任何变量都没有梯度,这可能意味着图形已断开连接。 我在这里复制了一个精简版的代码,只有与模型定义相关的部分。
该模型接受两个输入,一次一个,输入到同一个共享模型:编码器。 然后将编码器的两个输出连接起来并发送到一个密集层以计算最终输出。
我不明白出了什么问题,看起来在实例化编码器时我正在创建其他任何地方都没有使用的可训练变量。
对于网络布局,我从 keras 官方文档中获得了灵感: https://keras.io/guides/functional_api/#all-models-are-callable-just-like-layers
def _get_encoder(self, model_input_shape):
encoder_input = Input(shape=model_input_shape)
x = encoder_input
x = Conv2D(32, (3, 3), strides=1, padding="same")(x)
x = BatchNormalization(axis=-1)(x)
x = LeakyReLU(alpha=0.1)(x)
latent_z = Flatten()(x)
latent_z = Dense(self.latent_dim)(latent_z)
encoder = Model(
encoder_input,
latent_z,
name='encoder'
)
return encoder
def build_model(self):
model_input_shape = (self.height, self.width, self.depth)
model_input_1 = Input(shape=model_input_shape)
model_input_2 = Input(shape=model_input_shape)
self.encoder = self._get_encoder(model_input_shape)
z_1 = self.encoder(model_input_1)
z_2 = self.encoder(model_input_2)
x = concatenate([z_1, z_2])
prediction = Dense(1, activation='sigmoid')(x)
self.network = Model(
inputs=[model_input_1, model_input_2],
outputs=[prediction],
name = 'network'
)
network.network.compile(
optimizer='rmsprop',
loss='mse',
metrics=['mae'])
H = network.network.fit(
x=train_gen,
validation_data=test_gen,
epochs=EPOCHS,
steps_per_epoch=STEPS,
validation_steps=STEPS)
【问题讨论】:
标签: python tensorflow keras deep-learning neural-network