小编dan*_*451的帖子

TensorFlow:argmax(-min)

我刚注意到TensorFlow中的一个意外(至少对我来说)行为.我认为tf.argmax( - argmin)从外到内操作Tensor的行列,但显然它没有?!

例:

import numpy as np
import tensorflow as tf

sess = tf.InteractiveSession()

arr = np.array([[31, 23,  4, 24, 27, 34],
                [18,  3, 25,  0,  6, 35],
                [28, 14, 33, 22, 20,  8],
                [13, 30, 21, 19,  7,  9],
                [16,  1, 26, 32,  2, 29],
                [17, 12,  5, 11, 10, 15]])

# arr has rank 2 and shape (6, 6)
tf.rank(arr).eval()
> 2
tf.shape(arr).eval()
> array([6, 6], dtype=int32)
Run Code Online (Sandbox Code Playgroud)

tf.argmax有两个参数:inputdimension.由于数组的索引arr …

python arrays indexing tensorflow

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

重置/恢复整个分支到另一个分支状态?

我有一个分支A和一个分支B(以及其他一些分支).

让我们说A的提交历史如下:

  • 承诺5
  • 承诺4
  • 提交3
  • ...

B的承诺历史:

  • 其他一些提交
  • 承诺4
  • 从分支C合并其他东西(进入分支B)
  • 提交3
  • ...

基本上我想要的是"删除"提交所做的所有更改,其他一些提交以及从分支C到分支B 的其他内容的合并.

我想分支的工作树是完全一样的像支的工作树.

我该如何实现这一目标?

git merge revert reset

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

TensorFlow 2.0:如何使用tf.keras对图形进行分组?tf.name_scope / tf.variable_scope不再使用了吗?

早在TensorFlow <2.0中,我们通过将图层分组为或来定义图层,尤其是更复杂的设置,例如初始模块tf.name_scopetf.variable_scope

利用这些运算符,我们可以方便地构建计算图,从而使TensorBoard的图视图更容易解释。

结构化群组的一个示例: 在此处输入图片说明

这对于调试复杂的体系结构非常方便。

不幸的是,tf.keras似乎没有理会,tf.name_scope并且tf.variable_scope在TensorFlow> = 2.0中消失了。因此,这样的解决方案...

with tf.variable_scope("foo"):
    with tf.variable_scope("bar"):
        v = tf.get_variable("v", [1])
        assert v.name == "foo/bar/v:0"
Run Code Online (Sandbox Code Playgroud)

...不再可用。有替代品吗?

我们如何在TensorFlow> = 2.0中对图层和整个模型进行分组?如果我们不对图层进行分组,那么tf.keras只需将所有内容依次放置在图形视图中,就会给复杂的模型造成很大的混乱。

有替代品tf.variable_scope吗?到目前为止我找不到任何东西,但是在TensorFlow <2.0中大量使用了该方法。


编辑:我现在已经为TensorFlow 2.0实现了一个示例。这是使用tf.keras以下命令实现的简单GAN :

# Generator
G_inputs = tk.Input(shape=(100,), name=f"G_inputs")

x = tk.layers.Dense(7 * 7 * 16)(G_inputs)
x = tf.nn.leaky_relu(x)
x = tk.layers.Flatten()(x)
x = tk.layers.Reshape((7, 7, 16))(x)

x = tk.layers.Conv2DTranspose(32, (3, 3), padding="same")(x)
x = …
Run Code Online (Sandbox Code Playgroud)

python keras tensorflow tensorboard tensorflow2.0

12
推荐指数
1
解决办法
1394
查看次数

Python:从基类数据类继承的数据类,如何将值从基类升级到新类?

如何将值从基础数据类升级到继承自它的数据类?

示例(Python 3.7.2)

from dataclasses import dataclass

@dataclass
class Person:
    name: str 
    smell: str = "good"    

@dataclass
class Friend(Person):

    # ... more fields

    def say_hi(self):        
        print(f'Hi {self.name}')

friend = Friend(name='Alex')
f1.say_hi()
Run Code Online (Sandbox Code Playgroud)

打印“嗨亚历克斯”

random_stranger = Person(name = 'Bob', smell='OK')
Run Code Online (Sandbox Code Playgroud)

返回 random_stranger "Person(name='Bob',sole='OK')"

如何将 random_stranger 变成朋友?

Friend(random_stranger)
Run Code Online (Sandbox Code Playgroud)

返回“朋友(姓名=人(姓名='鲍勃',气味='OK'),气味='好')”

结果我想得到“朋友(名字=“鲍勃”,气味=“OK”)”。

Friend(random_stranger.name, random_stranger.smell)
Run Code Online (Sandbox Code Playgroud)

有效,但如何避免必须复制所有字段?

或者我是否可能无法在从数据类继承的类上使用 @dataclass 装饰器?

python python-3.7 python-dataclasses

11
推荐指数
1
解决办法
8099
查看次数

强大的gitk/gitg替代品?

我正在寻找一个图形git存储库查看器.Gitk很好并且与git本身一起分发,gitg是(在我看来)更好的替代gitk但是两者都缺乏功能(搜索提交/标签/ ...,switiching /配置时间(区域)和等等).

因为我直接在终端中做所有的git东西我不需要一些重载的GUI试图做所有的git魔术,我只想要一个高效的查看器来图形表示我的文件,提交,分支,标签等等比gitk/gitg更多的功能.

有什么建议?

编辑:大部分时间我都在使用linux.

git user-interface repository viewer

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

枕头:使用Draw.rectangle的奇怪行为

我正在使用Pillow在for循环中绘制矩形.这适用于我的台式电脑,但在我的笔记本电脑上抛出一个奇怪的例外.

这是代码(缩写):

from PIL import Image, ImageDraw
(...)
img = Image.open(sys.argv[1])
rimg = img.copy()
rimg_draw = ImageDraw.Draw(rimg)
(...)
(for-loop)
    rimg_draw.rectangle((x1, y1, x2, y2), fill=None, outline=(255, 0, 0))
Run Code Online (Sandbox Code Playgroud)

这会引发以下异常:

rimg_draw.rectangle((x1, y1, x2, y2), fill=None, outline=(255, 0, 0))
  File "/home/daniel/tensorflow2.7/lib/python2.7/site-packages/PIL/ImageDraw.py", line 203, in rectangle
    ink, fill = self._getink(outline, fill)
  File "/home/daniel/tensorflow2.7/lib/python2.7/site-packages/PIL/ImageDraw.py", line 124, in _getink
    ink = self.draw.draw_ink(ink, self.mode)
TypeError: function takes exactly 1 argument (3 given)
Run Code Online (Sandbox Code Playgroud)

我不明白,为什么这段代码失败了:在Pillow,我们自己的文档 PIL.ImageDraw.Draw.rectangle这些参数定义的:rectangle(xy, fill=None, outline=None).

由于文件明确列出了可选参数filloutline,为什么枕头抱怨,只需要1个参数? …

python python-imaging-library python-2.7 pillow

9
推荐指数
2
解决办法
4635
查看次数

TensorFlow:多GPU配置(性能)

我想知道在使用TensorFlow训练网络时多GPU系统被认为是"最佳实践".

例如,我的一个网络看起来像这样:

                         input
                           |
                         (...) <-- convolutional layers
                           |
                       _________
    fully-connected    |       |    fully-connected
    output stream 1 -> |       | <- output stream 2
Run Code Online (Sandbox Code Playgroud)

TensorFlow是否有效地分配了多个GPU?或者我应该指定自己哪个GPU TensorFlow应该用于特定操作?

我现在还没有对它进行基准测试,今天就开始了一些GPU实验.但是,目前我没有指定在卷积层上使用哪个设备,但我确实为完全连接的层指定了它:

# flattened information of the last convolutional layer
h_pooln_flat = tf.reshape(...)

with tf.device("/gpu:0"):
    # stream 1 stuff

with tf.device("/gpu:1"):
    # stream 2 stuff
Run Code Online (Sandbox Code Playgroud)

这是一个好主意吗?或者应该将资源分配留给TensorFlow?

我想卷积层的单个"流"不能并行计算?!因此,卷积,汇集,...部分哪个设备无关紧要?!

获得最佳性能的任何提示?

目前我正在使用2个GPU的Slurm集群的一个节点上进行培训,但我可能可以在更多节点上进行训练,因此可以训练4个,6个甚至8个GPU.但是,我猜超过2个GPU会有很多开销吗?


编辑(慢多GPU性能):一些测试后,我感到很吃惊......如果我让TensorFlow决定如何分配和删除设备特定的语句在网络训练相当快.这对我来说真的很令人惊讶......当总共有两个GPU时,什么比在一个GPU上拥有每个输出流更有效?此外,似乎(根据输出)Tensorflow只使用一个GPU?!


EDIT2(NaN值):经过一些测试后,我经历过我的gpu:0流1和gpu:1流2的手动设置不仅比让TensorFlow决定使用什么慢(而且根据管道脚本输出TensorFlow只使用一个 GPU)但是有时我的(我不知道为什么)我的" gpu:0为流1和gpu:1流2" - 解决方案只生成NaN值.喜欢在init之后直接或短期.很奇怪.

TensorFlow是否需要某种线程锁定或多个GPU的输入数据的手动复制?

machine-learning cluster-computing tensorflow cudnn

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

是否有类似NumPy的库进行集计算?

对于快速数值计算,我经常使用NumPy.尽管NumPy是一个很好的工具,但它(显然)不是设置操作的好选择,因为NumPy适用于数组.甚至Python的内置集合对象比使用NumPy进行集合操作要快得多:


制备:

# NumPy arrays
a = np.unique(np.random.randint(0, high=1000, size=1000))
b = np.unique(np.random.randint(0, high=1000, size=1000))

# Python's built-in set objects
sa = set(a)
sb = set(b)
Run Code Online (Sandbox Code Playgroud)

设置交集:

# NumPy
timeit.timeit("np.intersect1d(a, b)", setup="from __main__ import a, b, np", number=10000)
> 1.3161415259819478

# Python
timeit.timeit("sa.intersection(sb)", setup="from __main__ import sa, sb", number=10000)
> 0.2791759959945921
Run Code Online (Sandbox Code Playgroud)

设定差异:

# NumPy
timeit.timeit("np.setdiff1d(a, b)", setup="from __main__ import a, b, np", number=10000)
> 0.6135410660062917

# Python
timeit.timeit("sa - sb", setup="from __main__ import sa, sb", number=10000)
> 0.21169587498297915 …
Run Code Online (Sandbox Code Playgroud)

python performance numpy set

8
推荐指数
0
解决办法
1147
查看次数

Keras:binary_crossentropy和categorical_crossentropy混淆

在使用TensorFlow很长一段时间之后,我已经阅读了一些Keras教程并实现了一些示例.我找到了几个keras.losses.binary_crossentropy用作损失函数的卷积自动编码器的教程.

我想binary_crossentropy应该不会是一个多级的损失函数,并最有可能使用二进制标签,但实际上Keras(TF Python的后端)称tf.nn.sigmoid_cross_entropy_with_logits,这实际上是用于与多个独立的类是分类任务不是相互排斥的.

另一方面,我的期望categorical_crossentropy是用于多类分类,其中目标类彼此依赖,但不一定是单热编码.

但是,Keras文档指出:

(...)当使用categorical_crossentropy损失时,你的目标应该是分类格式(例如,如果你有10个类,每个样本的目标应该是一个10维向量,在索引处为1的全0期望对应于样本的类别).

如果我没有记错,这只是单热编码分类任务的特例,但潜在的交叉熵损失也适用于概率分布("多类",依赖标签)?

此外,Keras使用tf.nn.softmax_cross_entropy_with_logits(TF python后端)实现,其本身指出:

注意:虽然这些类是互斥的,但它们的概率不一定是.所需要的只是每行标签是有效的概率分布.如果不是,则梯度的计算将是不正确的.

如果我错了,请纠正我,但在我看来Keras文档是 - 至少 - 不是非常"详细"?!

那么,Keras命名损失函数背后的想法是什么?文档是否正确?如果二进制交叉熵真的依赖于二进制标签,它就不适用于自动编码器,对吧?!同样,分类的交叉熵:如果文档是正确的,应该只适用于一个热门的编码标签?!

python classification keras tensorflow cross-entropy

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

TensorFlow:生成随机常量

在我的IPython进口tensorflow as tfnumpy as np创造的TensorFlow InteractiveSession.当我使用numpy输入运行或初始化一些正常分布时,一切运行正常:

some_test = tf.constant(np.random.normal(loc=0.0, scale=1.0, size=(2, 2)))
session.run(some_test)
Run Code Online (Sandbox Code Playgroud)

返回:

array([[-0.04152317,  0.19786302],
       [-0.68232622, -0.23439092]])
Run Code Online (Sandbox Code Playgroud)

正如预期的那样.

...但是当我使用Tensorflow正态分布函数时:

some_test = tf.constant(tf.random_normal([2, 2], mean=0.0, stddev=1.0, dtype=tf.float32))
session.run(some_test)
Run Code Online (Sandbox Code Playgroud)

...它引发了一个类型错误说:

(...)
TypeError: List of Tensors when single Tensor expected
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么?

输出:

sess.run(tf.random_normal([2, 2], mean=0.0, stddev=1.0, dtype=tf.float32))
Run Code Online (Sandbox Code Playgroud)

单独返回np.random.normal生成的完全相同的东西- >一个形状矩阵,(2, 2)其值取自正态分布.

python numpy initialization interactive-session tensorflow

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