common包的utils模块

Python的utils模块是一个通用工具模块,其中包含了一些有用的函数和类,用于编写Python程序。

以下是utils模块中的一些常见功能:

  1. copy:提供了深拷贝和浅拷贝的函数。
  2. range:提供了一组非常方便的函数来生成数字范围。
  3. random:提供了伪随机数生成器和一些随机选择函数。
  4. sys:提供了一些与Python解释器和进程相关的函数和变量。
  5. os:提供了一些与操作系统交互的函数和变量。
  6. re:提供了正则表达式的功能。
  7. time:提供了一些与时间和日期相关的函数和变量。
  8. collections:提供了一些有用的数据结构,如defaultdict和Counter。
  9. functools:提供了一些有用的函数,如partial和reduce。
  10. json:提供了JSON编码和解码的功能。
  11. pickle:提供了Python对象的序列化和反序列化功能。

除了上述常用功能,utils模块还包含了许多其他有用的函数和类。在编写Python程序时,可以查看utils模块,以了解是否有可以重复使用的代码。

utils模块的Params函数

在Python的utils模块中,Params函数是一个用于将参数转换为对象的函数。这个函数的定义如下:

class Params:
“”"
Load hyperparameters from a json file.
Example:

```
params = Params(json_path)
print(params.learning_rate)
params.learning_rate = 0.5  # change the value of learning_rate in params
```


def __init__(self, json_path):
    self.update(json_path)
 
def save(self, json_path):
    with open(json_path, 'w') as f:
        json.dump(self.__dict__, f, indent=4)
 
def update(self, json_path):
    with open(json_path, 'r') as f:
        params = json.load(f)
        self.__dict__.update(params)

Params函数的作用是将一个JSON格式的参数文件加载到一个Python对象中。这个对象可以像Python类实例一样访问参数。例如,如果JSON文件中包含一个learning_rate参数,则可以使用以下方式访问该参数:

params = Params('params.json')print(params.learning_rate)

在这个例子中,params.json是一个JSON格式的参数文件,它包含了一个learning_rate参数。Params函数将这个参数文件加载到一个Python对象中,并使用点运算符来访问learning_rate参数的值。

Params函数还提供了一个update方法,该方法允许在运行时更新参数。例如,以下代码将learning_rate参数的值更改为0.5:

params.learning_rate = 0.5

最后,Params函数还提供了一个save方法,该方法可以将当前参数对象保存回JSON格式的文件中。例如,以下代码将参数对象保存回params.json文件中:

params.save('params.json')

这个函数对于在训练和测试中使用参数非常有用,因为它可以轻松地在不同的实验和模型之间共享参数。

utils模块的set_logger函数

set_logger函数是一个用于设置日志记录器的函数。这个函数的定义如下:

import logging
import os


def set_logger(log_path):
    """
    Set the logger to log info in terminal and file `log_path`.
    In general, it is useful to have a logger so that every output to the terminal is saved
    in a permanent file. Here we save it to `model_dir/train.log`.

Example:
```
logger = set_logger('mylog.log')
logger.info('Start training...')
```

Args:
    log_path: (string) where to log
"""
if os.path.exists(log_path):
    os.remove(log_path)
logger = logging.getLogger()
logger.setLevel(logging.INFO)

# File handler
file_handler = logging.FileHandler(log_path)
file_handler.setFormatter(logging.Formatter('%(asctime)s:%(levelname)s: %(message)s'))
logger.addHandler(file_handler)

# Stream handler
stream_handler = logging.StreamHandler()
stream_handler.setFormatter(logging.Formatter('%(message)s'))
logger.addHandler(stream_handler)

return logger

set_logger函数的作用是设置一个日志记录器,将日志记录到终端和文件中。通过设置日志记录器,我们可以方便地将程序的输出保存在一个文件中,以便后续查看。

set_logger函数中,首先创建了一个名为logger的日志记录器对象,并设置其记录级别为INFO。接着创建了一个文件处理器file_handler,它将日志记录到文件中。文件处理器使用FileHandler类来创建,使用setFormatter方法设置日志记录的格式,最后将其添加到logger对象中。接着创建了一个流处理器stream_handler,它将日志记录到终端中。流处理器使用StreamHandler类来创建,同样使用setFormatter方法设置日志记录的格式,并将其添加到logger对象中。

最后,set_logger函数返回一个logger对象,我们可以使用该对象来记录日志。例如,以下代码使用set_logger函数创建了一个日志记录器,并使用logger.info方法记录一条信息:

logger = set_logger('mylog.log') logger.info('Start training...')

在这个例子中,日志记录器将日志记录到mylog.log文件和终端中。logger.info方法用于记录一条信息,该信息将包含时间戳、级别和消息。此外,由于我们设置了日志记录器的级别为INFO,所以只有级别为INFO及以上的日志记录才会被记录下来