小编San*_*ta7的帖子

Tesnorflow:如何为 tf.nn.sampled_softmax_loss 提供您自己的 `sampled_values`?

在 tf.nn.sampled_softmax_loss 中,可选输入之一是放置您自己的样本值。我想提供我自己的样本值,以便我可以使用 float16(半精度)变量。如果sampled_values留空,Tensorflow 将使用log_uniform_candidate_sampler获取值,该值只能返回 float32。

这里是所有的输入。

tf.nn.sampled_softmax_loss(
    weights,
    biases,
    labels,
    inputs,
    num_sampled,
    num_classes,
    num_true=1,
    sampled_values=None,
    remove_accidental_hits=True,
    partition_strategy='mod',
    name='sampled_softmax_loss',
    seed=None
)
Run Code Online (Sandbox Code Playgroud)

https://www.tensorflow.org/api_docs/python/tf/nn/sampled_softmax_loss

这是他们为 sampled_values arg 提供的信息:

sampled_values:*_candidate_sampler 函数返回的 (sampled_candidates, true_expected_count, sampled_expected_count) 元组。(如果没有,我们默认为 log_uniform_candidate_sampler)

我想弄清楚如何提供这个元组。sampled_candidates, true_expected_count,究竟是什么sampled_expected_count

我知道它正在对权重和相应的偏差进行采样,所以我是否将它们放在它自己的元组中sampled_candidates?另外,我是将 int 放在矩阵中的权重位置,还是将整个嵌入本身放入?

我还查看了 Tensorflow 对负采样的数学补充,但找不到有关我的问题的任何信息https://www.tensorflow.org/extras/candidate_sampling.pdf

在我的搜索中,我在谷歌论坛上发现了这个非常相似的问题

https://groups.google.com/a/tensorflow.org/forum/#!topic/discuss/6IDJ-XAIb9M

给出的答案是

sampled_values是我们的 *candidate_sampler 类返回的元组。这些类实现了根据一些分布 Q 对对比标签(未观察到,但在训练期间使用)进行采样的方法,以用于近似训练方法,如噪声对比估计 (NCE) 和采样 Softmax。一个例子是 log_uniform_candidate_sampler,它根据对数均匀分布对标签进行采样。

您几乎不需要自己提供这些。您只需将调用结果传递给 tf.nn 模块中的 *candidate_sampler 函数(其中 * 可以是“uniform”、“log_uniform”、“zipfian_binned”等),例如

sampled_values = tf.nn.zipfian_binned_candidate_sampler(...)

如果您只是想让它工作,只需将其保留为 None,它将默认为 log_uniform_candidate_sampler(通常是一个不错的选择)。

如果您对此背后的数学感兴趣,请参阅此文档: …

python tensorflow

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

为什么 Tensorflow 中的分布策略不支持梯度裁剪?

看起来使用分布策略不支持梯度裁剪

https://github.com/tensorflow/tensorflow/blob/f9f6b4cec2a1bdc5781e4896d80cee1336a2fbab/tensorflow/python/keras/optimizer_v2/optimizer_v2.py#L383

(“使用分布策略时,当前不支持优化器中的梯度裁剪”(通过设置clipnorm或clipvalue)。”)

这有什么原因吗?我很想定义一个def _minimize(strategy, tape, optimizer, loss, trainable_variables):直接剪切渐变的自定义。

tensorflow

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

在google colab中,有没有办法检查正在运行的TPU版本?

Colab 提供免费的 TPU。很容易看出有多少个核心,但我想知道是否可以看到每个核心有多少内存?

tensorflow google-colaboratory tpu

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

Python:如何从 Google Drive 下载整个文件夹

我使用此代码从文件 id 下载 Google 驱动器文件,并为文件提供自己的名称

!pip install -U -q PyDrive

from google.colab import files
from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive
from google.colab import auth
from oauth2client.client import GoogleCredentials
import os
import sys


auth.authenticate_user()
gauth = GoogleAuth()
gauth.credentials = GoogleCredentials.get_application_default()
drive = GoogleDrive(gauth)

def downloadFiles(googleID, fileName):
    print("Downloading ", fileName)
    toDl = drive.CreateFile({'id': googleID})
    toDl.GetContentFile(fileName)
Run Code Online (Sandbox Code Playgroud)

downloadFiles("0B7Mdz82xyAxcMzJYOFhfg5gfMnp6Tl9Cei00U3BKTGNN","news.npy")

其中第一个参数的数字字符串downloadFiles是 google 驱动器文件 ID,可通过右键单击文件并选择获取共享链接来获取。

我尝试使用谷歌驱动器文件夹的共享链接 ID 进行操作,这是我得到的错误

downloadFiles("1kdNDfvg2zyyXYYrcXVnuuhIOnSLgtrnE","dlFolder")

---------------------------------------------------------------------------
FileNotDownloadableError                  Traceback (most recent call last)
<ipython-input-4-b59b205fcc37> in <module>()
      1 
      2 
----> 3 …
Run Code Online (Sandbox Code Playgroud)

python

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

通过sqlalchemy重复插入sqlite数据库会导致内存泄漏?

当通过to_sqlsqlalchemy 和pandas 以及指定的chucksize 将巨大的pandas数据帧插入sqlite时,会出现内存错误。

起初我以为这是一个问题,to_sql但是我尝试了一种解决方法,而不是使用我使用的块大小for i in range(100): df.iloc[i * 100000:(i+1):100000].to_sql(...),这仍然导致错误。

似乎在某些情况下,通过sqlalchemy重复插入sqlite会导致内存泄漏。

通过一个最小的示例,我很难尝试复制在转换数据时发生的内存泄漏。但这非常接近。

import string
import numpy as np
import pandas as pd
from random import randint
import random

def make_random_str_array(size=10, num_rows=100, chars=string.ascii_uppercase + string.digits):
    return (np.random.choice(list(chars), num_rows*size)
            .view('|U{}'.format(size)))

def alt(size, num_rows):
    data = make_random_str_array(size, num_rows=2*num_rows).reshape(-1, 2)
    dfAll = pd.DataFrame(data)
    return dfAll

dfAll = alt(randint(1000, 2000), 10000)

for i in range(330):
    print('step ', i)
    data = alt(randint(1000, 2000), 10000)
    df = pd.DataFrame(data)
    dfAll = …
Run Code Online (Sandbox Code Playgroud)

python sqlite memory-leaks sqlalchemy pandas

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

如何在 Python、Colab 中克隆特定分支?

我通常用它在colab中克隆一个github repo

!git 克隆https://github.com/user/repo.git

但是说我想克隆回购的特定分支。我试过

!git 克隆https://github.com/user/repo/tree/branch.git

但我收到一个错误

致命:未找到存储库“ https://github.com/user/repo/tree/branch.git/

python git github jupyter-notebook google-colaboratory

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

如何在 Pytorch 中为批处理中的每个矩阵进行转置?

假设我有 4 批 5x3 矩阵。所以这些张量的维度是 4x5x3。我如何对每个批次中的每个矩阵进行转置。那么将其转换为 4x3x5 吗?

pytorch

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

如何将CUDA固定的“零复制”内存用于内存映射文件?

目标/问题

在Python中,我正在寻找一种从内存映射文件到GPU读取/写入数据的快速方法。

在先前的SO溢出文章中[ 当在内存映射模式下尝试cupy.load较大尺寸的.npy文件时,cupy OutOfMemoryError,但np.load可以正常工作 ]

在提到的地方,可以使用CUDA固定的“零复制”存储器。此外,尽管该人员正在使用C ++ 进行开发,但该方法似乎是由该人员开发的[ cuda-零拷贝内存,内存映射文件 ]。

我以前的尝试是在Cupy中进行的,但是我可以接受任何cuda方法。

到目前为止我尝试过的

我提到了我如何使用Cupy的方法,它允许您以内存映射模式打开numpy文件。

import os
import numpy as np
import cupy

#Create .npy files. 
for i in range(4):
    numpyMemmap = np.memmap( 'reg.memmap'+str(i), dtype='float32', mode='w+', shape=( 2200000 , 512))
    np.save( 'reg.memmap'+str(i) , numpyMemmap )
    del numpyMemmap
    os.remove( 'reg.memmap'+str(i) )

# Check if they load correctly with np.load.
NPYmemmap = []
for i in range(4):
    NPYmemmap.append( np.load( 'reg.memmap'+str(i)+'.npy' , mmap_mode = 'r+' )  )
del NPYmemmap

# Eventually results in memory …
Run Code Online (Sandbox Code Playgroud)

memory-management cuda numpy chainer cupy

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

如何为 Python 格式化程序设置 vscode 设置?

不知怎的,我的格式化程序不工作。我 pip 安装了 yapf ,但是当我执行Ctrl+Shift+P-> Format Document 或Shift + Alt + F在选定的代码上时,它不会改变。我听说它会在保存时自动格式化,但这也不起作用。

我正在尝试遵循此处的指南。它提到我应该在设置中编辑这部分

"python.formatting.yapfArgs": ["--style", "{based_on_style: chromium, indent_width: 20}"],
Run Code Online (Sandbox Code Playgroud)

但当我搜索这个时,是我唯一看到的东西

我现在想做的是将缩进设置为 4 个空格,并调整最大行长度。

就是我的格式化设置

python formatting visual-studio-code

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

如何将多键字典转换为 pandas 数据框,其中每个键和值都有自己的列?

假设我有一本看起来像这样的字典

mkd = {('aab', 'ccd', 'bbd'): 3, ('aeb', 'cfd', 'bfd'): 8, ('atb', 'cttd', 'bft'): 83}
Run Code Online (Sandbox Code Playgroud)

我怎么能让 pandas 数据框变得疯狂,其中每个键和值都有自己的列。

我看到有一个从这里创建 pandas df 的解决方案

从具有多个不同长度的键和值(列表)的字典创建 panda DataFrame

dataframe1 = pd.DataFrame(dict([(k,pd.Series(v)) for k,v in my_dict.iteritems()]))  
Run Code Online (Sandbox Code Playgroud)

但该解决方案会导致多标头

aab
ccd
bbd
3
Run Code Online (Sandbox Code Playgroud)

当我在哪里寻找这个的示例行时

        col1  col2  col3 col4
    0 'aab' 'ccd'  'bbd'     3

Run Code Online (Sandbox Code Playgroud)

python pandas

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