Tensorflow和Keras的结果不同

时间:2019-09-16 23:41:36

标签: tensorflow keras deep-learning

在相同的网络结构下,我从Tensorflow和Keras获得了不同的结果。

损失函数看起来像

class MaskedMultiCrossEntropy(object):
    def loss(self, y_true, y_pred):
        vec = tf.nn.softmax_cross_entropy_with_logits(logits=y_pred, labels=y_true, dim=1)
        mask = tf.equal(y_true[:,0,:], -1)
        zer = tf.zeros_like(vec)
        loss = tf.where(mask, x=zer, y=vec)
        return loss

我使用的网络层称为CrowdsClassification,由Keras实现。然后我通过建立网络

x = Dense(128, input_shape=(input_dim,), activation='relu')(inputs)
x = Dropout(0.5)(x)
x = Dense(N_CLASSES)(x)
x = Activation("softmax")(x)
crowd = CrowdsClassification(num_classes, num_oracles, conn_type="MW")
x = crowd(x)

用Keras训练模型

model = Model(inputs=inputs, outputs=x)
model.compile(optimizer='adam', loss=loss)
model.fit(inputs,
           true_class, epochs=100, shuffle=False, verbose=2, validation_split=0.1))

使用张量流训练模型

optimizer = tf.train.AdamOptimizer(learning_rate=0.01, beta1=0.9, beta2=0.999)
opt_op = optimizer.minimize(loss, global_step=global_step)
sess.run(tf.global_variables_initializer())
for epoch in range(100):
    sess.run([loss, opt_op], feed_dict=train_feed_dict)

Tensorflow将获得错误的预测。看来问题出在损失函数上,Tensorflow无法反向传播掩盖的损失。任何人都可以提出建议吗?非常感谢。

0 个答案:

没有答案