我正在尝试为 Tensorflow keras 中的二元分类训练一个简单的 2 层全连接神经网络。我已经使用 sklearn 的train_test_split().
当我打电话时model.fit(X_train, y_train, validation_data=[X_val, y_val]),它显示所有时期的验证损失和准确性为 0,但它训练得很好。
此外,当我尝试在验证集上对其进行评估时,输出非零。
有人可以解释为什么我在验证时遇到这个 0 loss 0 准确度错误。谢谢你的帮助。
以下是此错误的完整示例代码 (MCVE):https ://colab.research.google.com/drive/1P8iCUlnD87vqtuS5YTdoePcDOVEKpBHr?usp=sharing
我正在尝试将 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 …
我想实施一个两步学习过程,其中:
loss_1loss_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正确更新每个时期。但是更新没有达到自定义损失函数。相反, …
请告诉我以下汇编(伪)代码的结果是什么?
我们已经设置寄存器的所有位EAX为0,这样反过来我们也有AH,AL和AX为0。但是,当我减去最低位AL,我们将采取补和补充,给我们一堆1秒,随后一0。
XOR eax, eax
SUB al 0x01
Run Code Online (Sandbox Code Playgroud)
因此,总而言之,我的问题是在执行上述代码时,将仅AL充满1,或者也将延续到AX和EAX。