def collect_torch_env() -> str: try: import torch.__config__ return torch.__config__.show() except ImportError: # compatible with older versions of pytorch from torch.utils.collect_env import get_pretty_env_info return get_pretty_env_info()
时间: 2023-06-24 19:05:35 浏览: 182
这是一个 Python 函数,用于收集 Torch 的环境信息,并将其返回为字符串。如果 Torch 模块已经安装并导入成功,它会使用 `torch.__config__.show()` 函数来获取环境信息;否则,它会使用 `torch.utils.collect_env.get_pretty_env_info()` 函数兼容旧版本的 Torch 来获取环境信息。
你可以将该函数用于调试 Torch 相关的问题,以便更好地理解 Torch 的运行环境。
相关问题
def logging_train_setup(args, cfg) -> None: output_dir = cfg.OUTPUT_DIR if output_dir: PathManager.mkdirs(output_dir) logger = logging.setup_logging( cfg.NUM_GPUS, get_world_size(), output_dir, name="visual_prompt") # Log basic information about environment, cmdline arguments, and config rank = get_rank() logger.info( f"Rank of current process: {rank}. World size: {get_world_size()}") logger.info("Environment info:\n" + collect_env_info()) logger.info("Command line arguments: " + str(args)) if hasattr(args, "config_file") and args.config_file != "": logger.info( "Contents of args.config_file={}:\n{}".format( args.config_file, PathManager.open(args.config_file, "r").read() ) ) # Show the config logger.info("Training with config:") logger.info(pprint.pformat(cfg)) # cudnn benchmark has large overhead. # It shouldn't be used considering the small size of typical val set. if not (hasattr(args, "eval_only") and args.eval_only): torch.backends.cudnn.benchmark = cfg.CUDNN_BENCHMARK
这段代码是用来设置训练日志的。首先,它会创建一个输出目录。然后,它会使用logging模块设置日志,其中包括环境信息、命令行参数、配置信息和当前进程的排名等。如果有配置文件,它还会将配置文件的内容记录在日志中。接着,它会显示训练配置,并设置是否使用cudnn benchmark。如果args中有eval_only属性且为True,那么不会使用cudnn benchmark。
tianshou基于pytorch的SACPolicy连续空间算法算法训练,输出训练模型pth,并利用writer.add_graph输出网络结构
好的,您可以按照以下步骤使用tianshou进行SACPolicy的训练,并且输出训练模型pth,并利用writer.add_graph输出网络结构。
1. 安装tianshou
您可以使用以下命令安装最新版本的tianshou:
```
pip install tianshou
```
2. 构建环境
您需要构建一个gym环境,然后将其传递给tianshou的环境包装器。以下是一个示例环境:
```python
import gym
import numpy as np
class MyEnv(gym.Env):
def __init__(self):
self.action_space = gym.spaces.Box(low=-1, high=1, shape=(1,))
self.observation_space = gym.spaces.Box(low=-1, high=1, shape=(1,))
self.state = np.zeros((1,))
def reset(self):
self.state = np.zeros((1,))
return self.state
def step(self, action):
action = np.clip(action, -1, 1)
reward = -np.abs(action)
self.state += action
done = False
return self.state, reward, done, {}
```
在这个环境中,我们使用一个连续的动作空间和一个连续的观测空间,每个步骤的奖励为动作的绝对值的负数。
3. 定义模型
使用tianshou的智能体API,我们可以定义我们的SACPolicy模型:
```python
import torch
import torch.nn.functional as F
from tianshou.policy import SACPolicy
class MyModel(torch.nn.Module):
def __init__(self, obs_shape, action_shape):
super().__init__()
self.obs_dim = obs_shape[0]
self.act_dim = action_shape[0]
self.fc1 = torch.nn.Linear(self.obs_dim, 64)
self.fc2 = torch.nn.Linear(64, 64)
self.mu_head = torch.nn.Linear(64, self.act_dim)
self.sigma_head = torch.nn.Linear(64, self.act_dim)
self.value_head = torch.nn.Linear(64, 1)
def forward(self, obs, state=None, info={}):
x = F.relu(self.fc1(obs))
x = F.relu(self.fc2(x))
mu = self.mu_head(x)
sigma = F.softplus(self.sigma_head(x))
value = self.value_head(x)
dist = torch.distributions.Normal(mu, sigma)
return dist, value
```
在这个模型中,我们使用两个完全连接的层来处理观察,并将输出分别传递到一个均值头和一个标准差头中。我们还添加了一个价值头来估计每个状态的价值。最后,我们将均值和标准差组合成一个正态分布,以便我们可以从中采样动作。
4. 训练模型
使用tianshou的训练API,我们可以定义我们的训练循环:
```python
import torch.optim as optim
from tianshou.trainer import offpolicy_trainer
from tianshou.data import Collector, ReplayBuffer
from torch.utils.tensorboard import SummaryWriter
env = MyEnv()
train_envs = gym.make('MyEnv-v0')
test_envs = gym.make('MyEnv-v0')
# 建立replay buffer
buffer = ReplayBuffer(size=10000, buffer_num=1)
# 建立collector
train_collector = Collector(policy, train_envs, buffer)
test_collector = Collector(policy, test_envs)
# 建立optimizer
optimizer = optim.Adam(policy.parameters(), lr=3e-4)
# 定义训练循环
result = offpolicy_trainer(
policy, train_collector, test_collector, optimizer,
max_epoch=100, step_per_epoch=1000, collect_per_step=1,
episode_per_test=10, batch_size=64, train_fn=None,
test_fn=None, stop_fn=None, writer=writer, verbose=True)
```
在这个循环中,我们首先创建一个回放缓冲区和一个collector,然后使用Adam优化器来优化我们的模型参数。我们使用offpolicy_trainer方法来训练我们的模型,其中我们设置了一些超参数,如最大epoch数、每个epoch的步数、每个步骤的收集数等。
5. 输出模型
训练完成后,我们可以将模型保存为一个.pth文件:
```python
torch.save(policy.state_dict(), 'model.pth')
```
6. 输出网络结构
最后,我们可以使用以下代码将网络结构写入TensorBoard:
```python
writer.add_graph(policy, torch.zeros((1, 1)))
```
在这个例子中,我们使用一个大小为1的观察空间,以便我们可以将模型传递给writer.add_graph方法。这将在TensorBoard中显示我们的网络结构。
阅读全文