小编Ani*_*nha的帖子

Keras - 验证损失和准确性停留在 0

我正在尝试为 Tensorflow keras 中的二元分类训练一个简单的 2 层全连接神经网络。我已经使用 sklearn 的train_test_split().

当我打电话时model.fit(X_train, y_train, validation_data=[X_val, y_val])它显示所有时期的验证损失和准确性为 0,但它训练得很好。

model.fit 调用和详细日志的屏幕截图

此外,当我尝试在验证集上对其进行评估时,输出非零。

model.evaluate 函数调用的屏幕截图

有人可以解释为什么我在验证时遇到这个 0 loss 0 准确度错误。谢谢你的帮助。

以下是此错误的完整示例代码 (MCVE):https ://colab.research.google.com/drive/1P8iCUlnD87vqtuS5YTdoePcDOVEKpBHr?usp=sharing

python machine-learning keras tensorflow tf.keras

18
推荐指数
1
解决办法
8285
查看次数

使用自定义层保存 Keras 模型

我正在尝试将 Keras 模型保存在 H5 文件中。Keras 模型有一个自定义层。当我尝试恢复模型时,出现以下错误:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-5-0fbff9b56a9d> in <module>()
      1 model.save('model.h5')
      2 del model
----> 3 model = tf.keras.models.load_model('model.h5')

8 frames
/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/utils/generic_utils.py in class_and_config_for_serialized_keras_object(config, module_objects, custom_objects, printable_module_name)
    319   cls = get_registered_object(class_name, custom_objects, module_objects)
    320   if cls is None:
--> 321     raise ValueError('Unknown ' + printable_module_name + ': ' + class_name)
    322 
    323   cls_config = config['config']

ValueError: Unknown layer: CustomLayer
Run Code Online (Sandbox Code Playgroud)

你能告诉我我应该如何保存和加载所有自定义 Keras 层的权重吗?(另外,保存时没有警告,是否可以从我已经保存但现在无法加载的 H5 文件中加载模型?)

这是此错误的最小工作代码示例 (MCVE),以及完整的扩展消息:Google Colab Notebook …

python save keras tensorflow

17
推荐指数
2
解决办法
7913
查看次数

使用不同的损失函数恢复训练

我想实施一个两步学习过程,其中:

  1. 使用损失函数预训练几个时期的模型 loss_1
  2. 将损失函数更改为loss_2并继续训练以进行微调

目前,我的做法是:

model.compile(optimizer=opt, loss=loss_1, metrics=['accuracy'])
model.fit_generator(…)
model.compile(optimizer=opt, loss=loss_2, metrics=['accuracy'])
model.fit_generator(…)
Run Code Online (Sandbox Code Playgroud)

请注意,优化器保持不变,只有损失函数发生变化。我想顺利地继续训练,但损失函数不同。根据这篇文章,重新编译模型会失去优化器状态。问题:

a) 即使我使用相同的优化器,例如 Adam,我会丢失优化器状态吗?
b) 如果 a) 的答案是肯定的,关于如何在不重置优化器状态的情况下将损失函数更改为新函数的任何建议?

编辑:
根据 Simon Caby 的建议并基于此线程,我创建了一个自定义损失函数,其中包含两个依赖于纪元数的损失计算。但是,它对我不起作用。我的做法:

model.compile(optimizer=opt, loss=loss_1, metrics=['accuracy'])
model.fit_generator(…)
model.compile(optimizer=opt, loss=loss_2, metrics=['accuracy'])
model.fit_generator(…)
Run Code Online (Sandbox Code Playgroud)

初始化后,我编译如下current_epoch

def loss_wrapper(t_change, current_epoch):
    def custom_loss(y_true, y_pred):
       c_epoch = K.get_value(current_epoch)
       if c_epoch < t_change:
           # compute loss_1
       else:
           # compute loss_2
    return custom_loss
Run Code Online (Sandbox Code Playgroud)

为了更新current_epoch,我创建了以下回调:

current_epoch = K.variable(0.)
model.compile(optimizer=opt, loss=loss_wrapper(5, current_epoch), metrics=...)
Run Code Online (Sandbox Code Playgroud)

回调self.current_epoch正确更新每个时期。但是更新没有达到自定义损失函数。相反, …

keras loss-function

8
推荐指数
1
解决办法
1405
查看次数

寄存器AL和AX溢出到哪里?

请告诉我以下汇编(伪)代码的结果是什么?
我们已经设置寄存器的所有位EAX为0,这样反过来我们也有AHALAX为0。但是,当我减去最低位AL,我们将采取补和补充,给我们一堆1秒,随后一0。

XOR eax, eax
SUB al 0x01
Run Code Online (Sandbox Code Playgroud)

因此,总而言之,我的问题是在执行上述代码时,将AL充满1,或者也将延续到AXEAX

x86 assembly integer-overflow cpu-registers ctf

3
推荐指数
1
解决办法
65
查看次数