在 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(通常是一个不错的选择)。
如果您对此背后的数学感兴趣,请参阅此文档: …
看起来使用分布策略不支持梯度裁剪
(“使用分布策略时,当前不支持优化器中的梯度裁剪”(通过设置clipnorm或clipvalue)。”)
这有什么原因吗?我很想定义一个def _minimize(strategy, tape, optimizer, loss, trainable_variables):
直接剪切渐变的自定义。
Colab 提供免费的 TPU。很容易看出有多少个核心,但我想知道是否可以看到每个核心有多少内存?
我使用此代码从文件 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) 当通过to_sql
sqlalchemy 和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) 我通常用它在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/ ”
假设我有 4 批 5x3 矩阵。所以这些张量的维度是 4x5x3。我如何对每个批次中的每个矩阵进行转置。那么将其转换为 4x3x5 吗?
在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) 不知怎的,我的格式化程序不工作。我 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 个空格,并调整最大行长度。
这就是我的格式化设置
假设我有一本看起来像这样的字典
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 ×6
tensorflow ×3
pandas ×2
chainer ×1
cuda ×1
cupy ×1
formatting ×1
git ×1
github ×1
memory-leaks ×1
numpy ×1
pytorch ×1
sqlalchemy ×1
sqlite ×1
tpu ×1