小编Sta*_*ean的帖子

如何为jupyter实验室添加conda环境

我正在使用jupyter实验室,我无法添加conda环境.我的想法是从我的基础环境中启动jupyter实验室,然后能够选择我的其他conda envs作为内核.

我安装了nb_conda_kernels软件包,这应该是这样做的,但它不能按我的意愿工作.实际上,让我们假设我创建了一个新的conda环境,然后我从基础启动jupyter实验室,我无法将新环境视为可用内核.

我找到了一个"修复",它每次都有效,但根本不方便.如果我在我的新环境中安装jupyter笔记本,那么从这个新环境启动一个jupyter笔记本,关闭它,返回基础环境,然后从基础环境启动jupyter lab,我的新环境可以作为jupyter实验室的内核使用.

如果你知道如何在没有这个"修复"的情况下使它工作,我将非常感激.

python anaconda jupyter-notebook jupyter-lab

26
推荐指数
4
解决办法
1万
查看次数

使用Python中的字典为函数提供默认参数

假设我有一个字典:

d = {'a': 3, 'b':4}
Run Code Online (Sandbox Code Playgroud)

我想创建一个函数f,该函数执行的功能与此函数完全相同:

def f(x, a=d['a'], b=d['b']):
  print(x, a, b)
Run Code Online (Sandbox Code Playgroud)

(不一定要打印,但是可以对变量进行一些操作并直接从其名称中调用)。

但是我想直接从字典创建此函数,也就是说,我想拥有一个看起来像的东西

def f(x, **d=d):
  print(x, a, b)
Run Code Online (Sandbox Code Playgroud)

并且其行为类似于先前定义的功能。我的想法是,我有一个很大的字典,其中包含函数参数的默认值,并且我不想这样做

def f(a= d['a'], b = d['b'] ...)
Run Code Online (Sandbox Code Playgroud)

我不知道在python中是否有可能。任何见识表示赞赏!

编辑:想法是能够打电话f(5, a=3)。Edit2:问题不在于将字典中存储的参数传递给函数,而是要定义一个函数,其参数名称和默认值存储在字典中。

python

14
推荐指数
2
解决办法
1211
查看次数

如何在 jupyter 实验室中使用 FileUpload 小部件?

我想FileUpload在 jupyter 实验室中使用小部件。我的笔记本单元中有以下几行代码:

uploader = widgets.FileUpload()
uploader
Run Code Online (Sandbox Code Playgroud)

在 jupyter notebook 中,单元格的输出是一个可点击的按钮,我可以用它来上传文件。在 jupyter 实验室中,输出如下:

FileUpload(value={}, description='Upload')
Run Code Online (Sandbox Code Playgroud)

这是有关uploader对象的信息:

Type:           FileUpload
String form:    FileUpload(value={}, description='Upload')
File:           ~/miniconda3/envs/fastai2/lib/python3.7/site-packages/ipywidgets/widgets/widget_upload.py
Run Code Online (Sandbox Code Playgroud)

是否可以让这个小部件在 jupyter 实验室上工作?如果是这样,我应该如何进行?

python file-upload jupyter-notebook jupyter-lab

13
推荐指数
2
解决办法
5543
查看次数

是否可以在Python实例级别覆盖__getitem__?

使用以下代码:

import types

class Foo():
    def __getitem__(self, x):
        return x

def new_get(self, x):
    return x + 1

x = Foo()
x.__getitem__ = types.MethodType(new_get, x)
Run Code Online (Sandbox Code Playgroud)

x.__getitem__(42)将返回43,但x[42]将返回42。

有没有一种方法可以__getitem__在Python实例级别进行覆盖?

python monkeypatching

11
推荐指数
2
解决办法
222
查看次数

更改类时Jupyter自动重新加载失败

在大多数情况下,使用jupyter实验室/笔记本时,我将这两行放在笔记本的第一个单元格中:

%reload_ext autoreload
%autoreload 2
Run Code Online (Sandbox Code Playgroud)

这些通常使我可以修改导入的脚本并使用它们,而不必重新导入它们或重新启动内核。昨天,我遇到了一个问题:我修改了脚本,在笔记本上执行一个单元格给了我一个错误。重新启动内核并重做导入可修复它。我调查了此问题,并尝试创建一个最小的示例。

假设您有以下工作目录:

+-- nb.ipynb
+-- scripts
|   +-- __init__.py
|   +-- script1.py
Run Code Online (Sandbox Code Playgroud)

笔记本由三个单元组成:

%reload_ext autoreload
%autoreload 2
Run Code Online (Sandbox Code Playgroud)

\

from scripts.script1 import Foo
Run Code Online (Sandbox Code Playgroud)

\

a = Foo(42)
Run Code Online (Sandbox Code Playgroud)

在实验开始时,script1包含以下内容:

class Foo():
    def __init__(self, x):
        self.x = x
Run Code Online (Sandbox Code Playgroud)

现在,我们执行笔记本的3个单元,一切正常。然后,我们转到script1.py并将其代码替换为:

class Bar():
    def __init__(self, x):
        self.x = x

class Foo(Bar):
    def __init__(self, x):
        super().__init__(x)
Run Code Online (Sandbox Code Playgroud)

我们保存文件,回到笔记本,然后执行包含单元格,a = Foo(42) 这将产生以下错误:

[autoreload of script.script failed: Traceback (most recent call last):
  File "/home/user/miniconda3/lib/python3.6/site-packages/IPython/extensions/autoreload.py", line 245, in check
    superreload(m, reload, self.old_objects)
  File "/home/user/miniconda3/lib/python3.6/site-packages/IPython/extensions/autoreload.py", …
Run Code Online (Sandbox Code Playgroud)

python jupyter-notebook

10
推荐指数
1
解决办法
540
查看次数

pytorch中的多标签分类

我有一个多标签分类问题。我有11个课程,大约4k个示例。每个示例可以具有1到4-5的标签。目前,我正在为每个类别分别使用log_loss训练分类器。如您所料,训练11个分类器需要花费很多时间,我想尝试另一种方法,只训练1个分类器。这个想法是,该分类器的最后一层将有11个节点,并将按类输出实数,然后将其通过S型转换为Proba。我要优化的损失是所有类上log_loss的平均值。

不幸的是,我是pytorch的菜鸟,即使通过阅读损失的源代码,我也无法弄清楚是否已经存在的损失之一确实满足我的要求,或者我是否应该创造新的损失,如果是这样,我真的不知道该怎么做。

具体来说,我想为批次中的每个元素提供一个大小为11的向量(其中每个标签均包含一个实数(越接近无穷大,则该类别的预测值越接近1),以及1的向量大小为11(每个真实标签均包含1),并能够计算所有11个标签的均值log_loss,并基于该损失优化分类器。

任何帮助将不胜感激 :)

pytorch

8
推荐指数
1
解决办法
1万
查看次数

为什么 os.symlink 使用相对于目的地的路径?

Python 3.7 文档os.symlink(src, dst)Create a symbolic link pointing to src named dst.

让我们想象一下这个工作目录:

+-- nb.ipynb
+-- dir1
|   +-- file1
+-- dir2
Run Code Online (Sandbox Code Playgroud)

假设我想在我的 notebook 中创建一个dir2名为filed2指向的符号链接。dir1/file1nb.ipynb

在笔记本的一个单元格中,我会放:

import os
os.symlink('dir1/file1', 'dir2/file2')
Run Code Online (Sandbox Code Playgroud)

但是,这行不通,这将在 dir2 中创建一个 file2,但是当您查看此文件的属性时,它的TypeisLink(broken) (inode/symlink)Link targetis dir1/file1。链接目标是您在 os.symlink 中作为 src 放置的内容。要获得正确的符号链接,需要执行以下操作

os.symlink('../dir1/file1', 'dir2/file2')
Run Code Online (Sandbox Code Playgroud)

这意味着os.symlink(src, dest),src应该包含源相对于目标的路径。

由于我不得不多次创建这样的符号链接,我创建了这个函数:

def symlink_rel(src, dst):
    rel_path_src = os.path.relpath(src, os.path.dirname(dst))
    os.symlink(rel_path_src, dst)
Run Code Online (Sandbox Code Playgroud)

打电话

symlink_rel('dir1/file1', 'dir2/file2')
Run Code Online (Sandbox Code Playgroud)

将创建正确的符号链接。在我看来 os.symlink …

python

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

如何让cuda在pytorch中不可用

我正在使用 cudas 运行一些代码,我需要在 CPU 上测试相同的代码来比较运行时间。为了在常规 pytorch 张量和 cuda float 张量之间做出决定,我使用的库调用 torch.cuda.is_available()。有没有简单的方法可以让这个函数返回 false?我尝试更改 Cuda 可见设备

os.environ["CUDA_VISIBLE_DEVICES"]=""
Run Code Online (Sandbox Code Playgroud)

但 torch.cuda.is_available() 仍然返回 True。我进入了 pytorch 源代码,就我而言, torch.cuda.is_avaible 返回

torch._C._cuda_getDeviceCount() > 0
Run Code Online (Sandbox Code Playgroud)

我认为我应该能够在笔记本开始时“隐藏”我的 GPU,因此设备计数等于零,但到目前为止我没有取得任何成功。如有任何帮助,我们将不胜感激:)

cuda pytorch

4
推荐指数
1
解决办法
7304
查看次数

如何进行多标签分层抽样?

我正在处理多标签数据,我想使用分层抽样。假设我有 10 个类,我们称它们为“ABCDEFGHIJ”。我有一个包含 10 列的数据框,对应于每个标签,其中包含有关条目的其余信息。我可以在 n_entry*10 矩阵中提取这 10 列,我将其称为 label_values

例如,一行 label_values 看起来像 [0,0,1,1,0,0,0,0,0,0] 并且这个特定的行意味着条目具有标签 C 和标签 D。

我想在训练和验证集中对我的数据进行拆分,并且我希望在训练和验证中每个标签的比例相同。为了执行我的拆分,我使用了 Sklearn train_test_split 函数(在我需要分层之前),它恰好有一个参数分层。目前的行为是将multi_label行为变成multiclass one(我们认为[A,B]是一个全新的类,与A类和B类完全不同)。因此,有些类只有 1 个元素,这会引发错误:

ValueError("The least populated class in y has only 1"
                         " member, which is too few. The minimum"
                         " number of groups for any class cannot"
                         " be less than 2.")
Run Code Online (Sandbox Code Playgroud)

来自 StratifiedShuffleSplit 类的 _iter_indices 的 sklearn/model_selection/_split.py :

if np.min(class_counts) < 2:
        raise ValueError("The least populated class in y has only 1"
                         " member, which is …
Run Code Online (Sandbox Code Playgroud)

python scikit-learn

4
推荐指数
1
解决办法
2922
查看次数

Jupyter notebook,如何在正确的conda环境中执行系统shell命令?

我目前在使用 jupyter notebook 和系统 shell 命令时遇到了一些问题。我使用 nb_conda_kernels 能够从在基本环境中启动的 jupyter notebook 访问我的所有 conda 环境,这在我的大多数用例中都非常有效。为简单起见,让我们假设我有 2 个环境,一个基础环境和一个名为 work_env 的环境。我在基本环境中启动 jupyter notebook,并在打开我正在处理的 notebook 时选择 work_env 内核。

今天我遇到了这条线:

! pip install kaggle --upgrade
Run Code Online (Sandbox Code Playgroud)

执行单元后(正确激活 work_env 内核),pip 在我的基本环境中安装了 kaggle 包。预期的结果是在我的 work_env 中安装这个包。关于如何在 jupyter notebook 的“正确”环境中执行 shell 命令的任何想法?

python jupyter-notebook

4
推荐指数
1
解决办法
1万
查看次数

Python如何将assert与进行修改的函数一起使用?

假设我要创建一个将列表的每个元素乘以2的函数。创建该函数后,我想通过验证[1, 2]变为来检查一切正常[2, 4]。如果我的函数创建了一个新列表,则可以通过以下方式进行操作:

def double(l):
    new_l = []
    for j in l:
        new_l.append(j * 2)
    return new_l
Run Code Online (Sandbox Code Playgroud)

assert double([1, 2]) == [2, 4]
Run Code Online (Sandbox Code Playgroud)

现在,如果我的函数将列表修改为:

def double(l):
    for i, j in enumerate(l):
        l[i] = j * 2
Run Code Online (Sandbox Code Playgroud)

我可以

l = [1, 2]
double(l)
assert l == [2, 4]
Run Code Online (Sandbox Code Playgroud)

我发现此解决方案不是很好。有没有一种方法可以做到这一点,还是有更好的方法呢?

python

0
推荐指数
1
解决办法
34
查看次数