小编Cha*_*ker的帖子

在go(golang)中将指针传递给字符串有什么意义?

我正在阅读关于go(golang)字符串的以下对话.go中的字符串只是指向(只读)数组和长度的指针.因此,当您将它们传递给函数时,指针将作为值而不是整个字符串传递.因此,我想到,如果这是真的,那么为什么你甚至被允许定义为带有*string作为参数的签名的函数?如果字符串已经加上,则数据是不可变/只读的,因此无论如何都无法更改它.如果已经在内部执行了指针,那么允许将指针传递给字符串有什么意义呢?

string pointers go

6
推荐指数
2
解决办法
6281
查看次数

在 SLURM 中使用 sbatch 命令时如何导入本地 python 模块

我正在使用集群管理器slurm,并且正在使用 sbatch(使用 python interpeter)运行提交脚本。sbatch 提交导入了我的一个名为main_nn.py. 该模块与我的提交目录位于同一位置,但是,即使该文件存在,python 也无法找到它。我很难弄清楚为什么会发生这种情况。我的python文件如下所示:

#!/usr/bin/env python
#SBATCH --job-name=Python

print('hi')

import main_nn
Run Code Online (Sandbox Code Playgroud)

但是我的 slurm 转储文件的输出是:

hi
Traceback (most recent call last):
    File "/home/slurm/slurmd/job3223398/slurm_script", line6, in <module>
        import main_nn
ImportError: No module named main_nn
Run Code Online (Sandbox Code Playgroud)

我尝试检查模块main_nn是否在当前目录中,并且确实在那里。因此,对我来说似乎可疑的第一件事是 slurm 文件中的错误说我的脚本的位置是 at"/home/slurm/slurmd/job3223398/slurm_script"而不是 at path_to_project。因此我继续添加了一行

os.system('pwd')
Run Code Online (Sandbox Code Playgroud)

查看我的脚本是从哪里执行的,令我惊讶的是它是path_to_project"/home/slurm/slurmd/job3223398/slurm_script"哪个位置执行的,而不是在哪个位置执行,这一定意味着 sbatch 正在做一些时髦的事情来在一个位置执行脚本,但让它认为它在另一个位置。如果是这种情况,我该如何在 python 中进行导入,其中模块与我的提交脚本位于同一位置?我是否被迫将它放在一个包中并欺骗 python 认为它在一个包/库中?

python slurm

6
推荐指数
1
解决办法
6170
查看次数

如何在pytorch中实现对抗性示例?

我想重现:

来自论文https://arxiv.org/pdf/1312.6199.pdf.我想知道,如何在pytorch中实现这一点?我的主要困惑是因为loss_f我正在使用一个torch.nn.CrossEntropy()标准.我只需要更改我已经拥有的代码:

loss = criterion(outputs+r, labels)
loss.backward()
Run Code Online (Sandbox Code Playgroud)

至:

loss = criterion(outputs+r, labels)
loss = loss + c * r.norm(2)
loss.backward()
Run Code Online (Sandbox Code Playgroud)

或者那些东西(当然包括优化器中的r!).我知道它不太对,因为我没有明确地说明我是如何实现的x+r或超立方体约束,但那些是我仍需要弄清楚的部分.

我想目前我想在没有超立方体约束的情况下首先关注.如果我们假设我没事,那么上述是正确的吗?我只是想知道:

loss = loss + c * r.norm(2)
Run Code Online (Sandbox Code Playgroud)

尽力而为.


现在,如果我们确实包含超立方体约束,我的解决方案将如何变化?这是"惩罚功能方法"到位吗?


https://discuss.pytorch.org/t/how-does-one-implement-adversarial-examples-in-pytorch/15668

python machine-learning neural-network conv-neural-network pytorch

6
推荐指数
2
解决办法
599
查看次数

在 PyTorch 中使用分布式数据并行 (DDP) 时,训练期间检查点的正确方法是什么?

我想要(正确且官方的无错误方式)执行以下操作:

\n
    \n
  1. 从检查点恢复以继续在多个 GPU 上进行训练
  2. \n
  3. 在使用多个 GPU 进行训练期间正确保存检查点
  4. \n
\n

为此,我的猜测如下:

\n
    \n
  1. 为了执行第 1 步,我们让所有进程从文件中加载检查点,然后调用DDP(mdl)每个进程。我假设检查点保存了一个ddp_mdl.module.state_dict().
  2. \n
  3. 要做2,只需检查谁的rank = 0并让其执行torch.save({\'model\': ddp_mdl.module.state_dict()})
  4. \n
\n

大概代码:

\n
def save_ckpt(rank, ddp_model, path):\n    if rank == 0:\n        state = {\'model\': ddp_model.module.state_dict(),\n             \'optimizer\': optimizer.state_dict(),\n            }\n        torch.save(state, path)\n\ndef load_ckpt(path, distributed, map_location=map_location=torch.device(\'cpu\')):\n    # loads to\n    checkpoint = torch.load(path, map_location=map_location)\n    model = Net(...)\n    optimizer = ...\n    model.load_state_dict(checkpoint[\'model\'])\n    optimizer.load_state_dict(checkpoint[\'optimizer\'])\n    if distributed:\n        model = DDP(model, device_ids=[gpu], find_unused_parameters=True)\n    return model\n
Run Code Online (Sandbox Code Playgroud)\n

它是否正确?

\n
\n

我问的原因之一是分布式代码可能会出现微妙的错误。我想确保这不会发生在我身上。当然,我想避免死锁,但如果它发生在我身上,那就很明显了(例如,如果所有进程以某种方式尝试同时打开同一个 …

python distributed-computing neural-network deep-learning pytorch

6
推荐指数
1
解决办法
4052
查看次数

如何从 Coq 项目/包中自动创建一个“COQ_PROJ.opam”安装脚本?

我有一个很长的 coq 项目列表,我想用opam pin/install. 我想用 opam 安装它们,因为我正在使用这个使用 opam pin/install 的 python 工具(PyCoq)COQ_PROJ.opam / *.opam给定一个可以使用 make 安装的 coq 项目,如何自动创建一个文件?

例如,适合我的 coq 项目/包 (proj/pkg) 的格式是这样的:https: //github.com/IBM/pycoq/tree/main/pycoq/test/lf


一个想法是,在 pip 中,我们可以轻松地从已安装的 python 项目创建 pip 需求文件(自动创建requirements.txt)。因此,一种可能的解决方案是:

  1. 使用 make (或其说明)安装 coq 项目
  2. pip freeze > requirements.txt运行与 but for coq等效的命令。

如何做到这一点?


coq 项目的示例列表:

[
    {
        "project_name": "constructive-geometry",
        "train_files": [
            "problems.v",
            "affinity.v",
            "basis.v",
            "orthogonality.v",
            "part1.v",
            "part3.v",
            "part2.v"
        ],
        "test_files": [],
        "switch": "coq-8.10"
    },
    {
        "project_name": "higman-s",
        "train_files": …
Run Code Online (Sandbox Code Playgroud)

coq opam

6
推荐指数
0
解决办法
159
查看次数

为什么slurm中的作业在TensorFlow脚本中无限期冻结?

当我使用slurm(http://slurm.schedmd.com/)工作负载管理器时,我遇到此错误.当我运行一些tensorflow python脚本时,有时会导致错误(附加).它似乎无法找到安装的cuda库,但我正在运行不需要GPU的脚本.因此,我发现为什么cuda会成为一个问题非常令人困惑.如果我不需要,为什么cuda安装会出现问题?

我从slurm-job_id文件中获得的唯一有用信息如下:

I tensorflow/stream_executor/dso_loader.cc:108] successfully opened CUDA library libcublas.so locally
I tensorflow/stream_executor/dso_loader.cc:102] Couldn't open CUDA library libcudnn.so. LD_LIBRARY_PATH: /cm/shared/openmind/cuda/7.5/lib64:/cm/shared/openmind/cuda/7.5/lib
I tensorflow/stream_executor/cuda/cuda_dnn.cc:2092] Unable to load cuDNN DSO
I tensorflow/stream_executor/dso_loader.cc:108] successfully opened CUDA library libcufft.so locally
I tensorflow/stream_executor/dso_loader.cc:108] successfully opened CUDA library libcuda.so locally
I tensorflow/stream_executor/dso_loader.cc:108] successfully opened CUDA library libcurand.so locally
E tensorflow/stream_executor/cuda/cuda_driver.cc:491] failed call to cuInit: CUDA_ERROR_NO_DEVICE
I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:153] retrieving CUDA diagnostic information for host: node047
I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:160] hostname: node047
I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:185] libcuda reported version is: Not …
Run Code Online (Sandbox Code Playgroud)

linux slurm tensorflow

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

如何在 Pytorch 中实现元可训练步长?

我想实现一个(元)可训练步长。我用这篇文章尝试过:

https://discuss.pytorch.org/t/how-does-one-have-the-parameters-of-a-model-not-be-leafs/70076/17

并与更高的图书馆(https://github.com/facebookresearch/higher)没有运气......

我试过:

eta = torch.tensor([0.5], requires_grad=True).view(1)
inner_opt = torch.optim.Adam(child_model.parameters(), lr=eta)
#meta_params = itertools.chain(child_model.parameters(),eta.parameters())
meta_params = itertools.chain(child_model.parameters())
meta_opt = torch.optim.Adam(meta_params, lr=1e-3)
# do meta-training/outer training minimize outerloop: min_{theta} sum_t L^val( theta^{T} - eta* Grad L^train(theta^{T}) ) 
nb_outer_steps = 10 # note, in this case it's the same as number of meta-train steps (but it's could not be the same depending how you loop through the val set)
for outer_i, (outer_inputs, outer_targets) in enumerate(testloader, 0):
    meta_opt.zero_grad()
    if outer_i …
Run Code Online (Sandbox Code Playgroud)

machine-learning deep-learning pytorch

5
推荐指数
0
解决办法
280
查看次数

如何在 Isabelle 证明中打印局部变量和 ?thesis(在 Isabelle 中调试)?

有时我发现很难使用 Isabelle,因为我无法像在正常编程中那样使用“打印命令”。

例如,我想看看什么?thesis. 具体语义书说:

未知 ?thesis 隐含地与引理或 show 陈述的任何目标相匹配。下面是一个典型的例子:

我的愚蠢示例 FOL 证明是:

lemma
  assumes "(? x. ? y. x ? y)"
  shows "(?x. ? y. y ? x)"
proof (rule allI)
  show ?thesis
Run Code Online (Sandbox Code Playgroud)

但我收到错误:

proof (state)
goal (1 subgoal):
 1. ?x. ?y. y ? x 
Failed to refine any pending goal 
Local statement fails to refine any pending goal
Failed attempt to solve goal by exported rule:
  ?x. ?y. y ? x
Run Code Online (Sandbox Code Playgroud)

但我知道为什么。

我期望

?thesis === ?x. ?y. …
Run Code Online (Sandbox Code Playgroud)

theorem-proving isabelle

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

pytorch 的机器精度是多少,什么时候应该使用双打?

我正在对合成数据进行实验(例如拟合正弦曲线),我在 pytorch 中遇到了非常小的错误。一如约2.00e-7。我正在阅读有关机器精度的信息,它似乎非常接近机器精度。我怎么知道这是否会导致问题(或者它是否已经存在,例如我无法区分不同的错误,因为它们是“机器零”)。

错误:

p = np.array([2.3078539778125768e-07,
               1.9997889411762922e-07,
               2.729681222011256e-07,
               3.2532371115080884e-07])

m = np.array([3.309504692539563e-07,
                 4.1058904888091606e-06,
                 6.8326703386053605e-06,
                 7.4616147721799645e-06])
Run Code Online (Sandbox Code Playgroud)

让我感到困惑的是,我尝试将我认为的数字添加到较小的数字中,以便它没有返回任何差异,但它确实返回了一个差异(即我尝试a+eps = a使用eps = smaller than machine precision):

import torch

x1 = torch.tensor(1e-6)
x2 = torch.tensor(1e-7)
x3 = torch.tensor(1e-8)
x4 = torch.tensor(1e-9)

eps = torch.tensor(1e-11)

print(x1.dtype)
print(x1)
print(x1+eps)

print(x2)
print(x2+eps)

print(x3)
print(x3+eps)

print(x4)
print(x4+eps)
Run Code Online (Sandbox Code Playgroud)

输出:

torch.float32
tensor(1.0000e-06)
tensor(1.0000e-06)
tensor(1.0000e-07)
tensor(1.0001e-07)
tensor(1.0000e-08)
tensor(1.0010e-08)
tensor(1.0000e-09)
tensor(1.0100e-09)
Run Code Online (Sandbox Code Playgroud)

我希望一切都为零,但事实并非如此。有人可以向我解释发生了什么吗?如果我的损失接近,1e-7我应该使用double而不是float? 谷歌搜索似乎 single 是 float afaik 的精度。

如果我想使用双打,什么是缺点/优点 …

floating-point precision pytorch

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

使用分布式训练(例如DDP)时如何修复pytorch中的SIGSEGV?

在 pytorch 中运行 DDP 时,我不断遇到此问题:

\n
Traceback (most recent call last):\n  File "ml4coq-proj/embeddings_zoo/tree_nns/main_brando.py", line 330, in <module>\n    main_distributed()\n  File "ml4coq-proj/embeddings_zoo/tree_nns/main_brando.py", line 230, in main_distributed\n    mp.spawn(fn=train, args=(opts,), nprocs=opts.world_size)\n  File "/home/miranda9/miniconda3/envs/automl-meta-learning/lib/python3.8/site-packages/torch/multiprocessing/spawn.py", line 199, in spawn\n    return start_processes(fn, args, nprocs, join, daemon, start_method=\'spawn\')\n  File "/home/miranda9/miniconda3/envs/automl-meta-learning/lib/python3.8/site-packages/torch/multiprocessing/spawn.py", line 157, in start_processes\n    while not context.join():\n  File "/home/miranda9/miniconda3/envs/automl-meta-learning/lib/python3.8/site-packages/torch/multiprocessing/spawn.py", line 105, in join\n    raise Exception(\nException: process 1 terminated with signal SIGSEGV\n
Run Code Online (Sandbox Code Playgroud)\n

但这个错误的信息量相当小(例如,它没有告诉我什么进程或它试图访问什么),所以我不确定我需要做什么来解决它。

\n

一些研究告诉你:

\n
\n

SIGSEGV:在 Linux 等 Unix 操作系统上,“分段违规”(也称为“信号 11”、“SIGSEGV”、“分段错误”或缩写为“sig11”或“segfault”)是由当系统检测到某个进程正在尝试访问不属于它的内存地址时,内核会向该进程发出通知。通常,这会导致违规进程被终止。

\n
\n

是的,我确实有通常mp.spawn(fn=train, …

python distributed-computing multiprocessing neural-network pytorch

5
推荐指数
0
解决办法
2096
查看次数