相关疑难解决方法(0)

在自定义回调中访问验证数据

我正在安装train_generator,并通过自定义回调,我想在validation_generator上计算自定义指标.如何访问PARAMS validation_steps和validation_data 一个自定义的回调中?它不在self.params,也找不到它self.model.这就是我想做的事情.任何不同的方法都会受到欢迎.

model.fit_generator(generator=train_generator,
                    steps_per_epoch=steps_per_epoch,
                    epochs=epochs,
                    validation_data=validation_generator,
                    validation_steps=validation_steps,
                    callbacks=[CustomMetrics()])


class CustomMetrics(keras.callbacks.Callback):

    def on_epoch_end(self, batch, logs={}):        
        for i in validation_steps:
             # features, labels = next(validation_data)
             # compute custom metric: f(features, labels) 
        return
Run Code Online (Sandbox Code Playgroud)

keras:2.1.1

更新

我设法将验证数据传递给自定义回调的构造函数.但是,这会导致令人讨厌的"内核似乎已经死亡.它会自动重启".信息.我怀疑这是否是正确的方法.有什么建议吗?

class CustomMetrics(keras.callbacks.Callback):

    def __init__(self, validation_generator, validation_steps):
        self.validation_generator = validation_generator
        self.validation_steps = validation_steps


    def on_epoch_end(self, batch, logs={}):

        self.scores = {
            'recall_score': [],
            'precision_score': [],
            'f1_score': []
        }

        for batch_index in range(self.validation_steps):
            features, y_true = next(self.validation_generator)            
            y_pred = np.asarray(self.model.predict(features))
            y_pred = y_pred.round().astype(int) …
Run Code Online (Sandbox Code Playgroud)

python metrics keras

18
推荐指数
2
解决办法
5752
查看次数

在Keras中使用交叉验证的度量标准提前停止

在Keras有没有办法交叉验证被监控的早期停止指标EarlyStopping(monitor = 'val_acc', patience = 5)?在允许训练进入下一个时期之前,是否可以对模型进行交叉验证以获得更稳健的测试误差估计?我发现早期停止指标,比如验证集的准确性,可能会受到高度差异的影响.早期停止的模型在看不见的数据上通常表现不佳,我怀疑这是因为与验证集方法相关的高差异.

为了尽量减少早期停止指标的方差,我想k-fold交叉验证早期停止指标,因为模型从时代i到时代训练i + 1.我想在时代上取模型i,将训练数据分成10个部分,学习9个部分,估计剩余部分的误差,重复以便所有10个部分都有机会成为验证集,然后继续i + 1像往常一样用完整的训练数据训练时代.10个误差估计的平均值有望成为一个更强大的指标,可用于提前停止.

我曾尝试编写一个包含k-fold交叉验证的自定义度量函数,但我无法使其工作.有没有办法交叉验证被监控的早期停止指标,可能是通过Keras模型内部的自定义函数或Keras模型外部的循环?

谢谢!!

python prediction cross-validation keras

5
推荐指数
1
解决办法
521
查看次数

如何使用“tf.keras.callbacks.TensorBoard”记录激活?

的文档tf.keras.callbacks.TensorBoard说明该工具可以做到这一点:

此回调记录 TensorBoard 的事件,包括:

  • 指标汇总图
  • 训练图可视化
  • 激活直方图
  • 抽样分析

稍后还有:

histogram_freq:计算模型各层的激活和权重直方图的频率(以纪元为单位) 。如果设置为 0,则不会计算直方图。必须为直方图可视化指定验证数据(或分割)。

但是,当使用此参数时,我没有看到任何写入的激活摘要,只写入了权重本身。查看源代码,我也没有看到任何与激活相关的内容。

那么我错过了什么吗?是否可以在 TF2 中编写没有自定义代码的激活摘要?

python keras tensorflow tensorboard

5
推荐指数
1
解决办法
1480
查看次数

如何在 keras 自定义回调中访问 tf.data.Dataset?

我编写了一个自定义 keras 回调来检查来自生成器的增强数据。(有关完整代码,请参阅此答案tf.data.Dataset。)但是,当我尝试对 a 使用相同的回调时,它给了我一个错误:

  File "/path/to/tensorflow_image_callback.py", line 16, in on_batch_end
imgs = self.train[batch][images_or_labels]
TypeError: 'PrefetchDataset' object is not subscriptable
Run Code Online (Sandbox Code Playgroud)

keras 回调通常只适用于生成器,还是与我编写回调的方式有关?有没有办法修改我的回调或数据集以使其工作?

我认为这个难题由三部分组成。我对其中任何一个和所有的改变持开放态度。首先是自定义回调类中的init函数:

class TensorBoardImage(tf.keras.callbacks.Callback):
    def __init__(self, logdir, train, validation=None):
        super(TensorBoardImage, self).__init__()
        self.logdir = logdir
        self.file_writer = tf.summary.create_file_writer(logdir)
        self.train = train
        self.validation = validation
Run Code Online (Sandbox Code Playgroud)

其次,on_batch_end同一个类中的函数

def on_batch_end(self, batch, logs):
    images_or_labels = 0 #0=images, 1=labels
    imgs = self.train[batch][images_or_labels]
Run Code Online (Sandbox Code Playgroud)

三、实例化回调

import tensorflow_image_callback
tensorboard_image_callback = tensorflow_image_callback.TensorBoardImage(logdir=tensorboard_log_dir, train=train_dataset, validation=valid_dataset)
model.fit(train_dataset,
          epochs=n_epochs,
          validation_data=valid_dataset, 
          callbacks=[
                    tensorboard_callback,
                    tensorboard_image_callback
                    ])
Run Code Online (Sandbox Code Playgroud)

一些尚未让我找到答案的相关主题:

在自定义回调中访问验证数据

创建 …

python callback keras tensorflow tf.data.dataset

5
推荐指数
1
解决办法
1446
查看次数