小编And*_*ssi的帖子

Kafka Consumer默认组ID

我正在使用Apache Kafka及其Java客户端,我看到消息在属于同一组的不同Kafka消费者之间进行负载平衡(即共享相同的组ID).

在我的应用程序中,我需要所有消费者阅读所有消息.

所以我有几个问题:

  • 如果我没有在消费者属性中设置任何组ID,那么将给予Kafka Consumer哪个组ID?

  • 有一个默认值吗?

  • 客户端每次都创建一个随机值吗?

  • 我是否需要为每个消费者创建一个不同的ID,以确保每个消费者都收到所有消息?

编辑:谢谢你的回答.

你是对的:如果没有设置消费者群体ID,Kafka应该抱怨.

但是,我发现如果组id为null,则Java客户端将其设置为空字符串""以避免出现问题.显然这是我正在寻找的默认值.

让我所有的消费者感到惊讶,即使我没有设置他们的groupIds(所以他们都使用groupId =="")似乎接收了生产者写的所有消息.

我还是无法解释这个:有什么建议吗?

apache-kafka kafka-consumer-api

24
推荐指数
3
解决办法
2万
查看次数

Tensorflow MNIST Estimator:批量大小会影响图表的预期输入吗?

我已经按照TensorFlow MNIST Estimator教程进行了训练,并且训练了我的MNIST模型.
它似乎工作正常,但如果我在Tensorboard上可视化它我看到一些奇怪的东西:模型所需的输入形状是100 x 784.

这是一个屏幕截图:正如您在右侧框中看到的,预期输入大小为100x784.
我以为我会看到?x784那里.

看到? 输入的预期大小为100 x 784

现在,我确实在训练中使用100作为批量大小,但在Estimator模型函数中我还指定了输入样本量的大小是可变的.所以我期待?x 784将在Tensorboard中显示.

input_layer = tf.reshape(features["x"], [-1, 28, 28, 1], name="input_layer")
Run Code Online (Sandbox Code Playgroud)

我尝试在具有不同批量大小的同一模型上使用estimator.train和estimator.evaluate方法(例如50),并使用Estimator.predict方法一次传递一个样本.在这些情况下,一切似乎都很好.

相反,如果我尝试使用模型而不通过Estimator接口,我确实会遇到问题.例如,如果我冻结我的模型并尝试在GraphDef中加载它并在会话中运行它,如下所示:

with tf.gfile.GFile("/path/to/my/frozen/model.pb", "rb") as f:
    graph_def = tf.GraphDef()
    graph_def.ParseFromString(f.read())

with tf.Graph().as_default() as graph:
    tf.import_graph_def(graph_def, name="prefix")

    x = graph.get_tensor_by_name('prefix/input_layer:0')
    y = graph.get_tensor_by_name('prefix/softmax_tensor:0')

    with tf.Session(graph=graph) as sess:
        y_out = sess.run(y, feed_dict={x: 28_x_28_image})
Run Code Online (Sandbox Code Playgroud)

我将得到以下错误:
ValueError:无法为Tensor'前缀/ input_layer:0'提供形状值(1,28,28,1),其形状为'(100,28,28,1)'

这让我很担心,因为在生产中我需要冻结,优化和转换我的模型以在TensorFlow Lite上运行它们.所以我不会使用Estimator接口.

我错过了什么?

python numpy mnist tensorflow tensorflow-estimator

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

TensorFlow freeze_graph:必需的位置参数'unused_args'

我在带有High Sierra的Mac上使用TensorFlow 1.7和Python 3.6.5.

我训练了我的第一个MNIST模型,所以我基本上都有

  • 具有CNN图结构的graph.pbtxt文件
  • 一些model.ckpt-21000文件(.meta,.index .data)

我试图在我的bash上使用命令行freeze_graph命令冻结图形:

freeze_graph
--input_graph=/…/graph.pbtxt
--input_checkpoint=/…/model.ckpt-21000
--input_binary=false
--output_graph=/…/frozen_mnist.pb
--output_node_names=softmax_tensor
Run Code Online (Sandbox Code Playgroud)

但我得到了这个错误:

Traceback (most recent call last):  
File “/usr/local/bin/freeze_graph”, line 11, in <module>  
sys.exit(main())  
TypeError: main() missing 1 required positional argument: ‘unused_args’
Run Code Online (Sandbox Code Playgroud)

我不太确定我在那里失踪了什么.我很确定我使用的是正确的语法.

python mnist tensorflow

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

Seaborn Heatmap:为单元格中的文本加下划线

我正在用 Python 进行一些数据分析,我正在使用 Seaborn 进行可视化。Seaborn 非常适合创建热图。

我试图在我的热图中强调每一列的最大值。

通过使它们成为斜体粗体,我能够正确突出显示最大单元格中的文本。不过,我发现没有办法强调它。

这是我的代码示例:


data_matrix = < extract my data and put them into a matrix >
max_in_each_column = np.max(data_matrix, axis=0)

sns.heatmap(data_matrix,
            mask=data_matrix == max_in_each_column,
            linewidth=0.5,
            annot=True,
            xticklabels=my_x_tick_labels,
            yticklabels=my_y_tick_labels,
            cmap="coolwarm_r")

sns.heatmap(data_matrix,
            mask=data_matrix != max_in_each_column,
            annot_kws={"style": "italic", "weight": "bold"},
            linewidth=0.5,
            annot=True,
            xticklabels=my_x_tick_labels,
            yticklabels=my_y_tick_labels,
            cbar=False,
            cmap="coolwarm_r")
Run Code Online (Sandbox Code Playgroud)

这是我目前的结果: 我当前的热图,每列都有最大值 *斜体* 和 **粗体**

当然,我尝试过使用 argument annot_kws={"style": "underlined"},但显然在 Seaborn 中,“style”键仅支持值“normal”、“italic”或“oblique”。

有解决方法吗?

python data-visualization matplotlib underline seaborn

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

仅冻结 torch.nn.Embedding 对象的某些行

我是 Pytorch 的新手,我正在尝试在嵌入上实现一种“训练后”程序。

我有一个包含一组项目的词汇表,并且我已经为每个项目学习了一个向量。我将学习到的向量保存在 nn.Embedding 对象中。我现在想做的是将新项目添加到词汇表中,而不更新已经学习的向量。新项目的嵌入将被随机初始化,然后在保持所有其他嵌入冻结的同时进行训练。

我知道为了防止 nn.Embedding 被训练,我需要设置False它的requires_grad变量。我还发现了与我类似的另一个问题。最佳答案建议

  1. 要么存储冻结向量和要在不同的 nn.Embedding 对象中训练的向量,前者使用requires_grad = False,后者使用requires_grad = True

  2. 或者将冻结的向量和新的向量存储在同一个 nn.Embedding 对象中,计算所有向量的梯度,但仅在新项的向量的维度上进行降序。然而,这会导致性能的相关下降(当然,我想避免这种情况)。

我的问题是,我确实需要将新项目的向量存储在与旧项目的冻结向量相同的 nn.Embedding 对象中。这个约束的原因如下:当使用项目(旧的和新的)的嵌入构建我的损失函数时,我需要根据项目的 id 查找向量,出于性能原因,我需要使用 Python 切片。换句话说,给定一个项目 ids 列表item_ids,我需要做类似的事情vecs = embedding[item_ids]。如果我对旧项目和新项目使用两个不同的 nn.Embedding 项目,我将需要使用带有 if-else 条件的显式 for 循环,这会导致性能更差。

我有什么办法可以做到这一点吗?

python embedding gradient-descent word-embedding pytorch

2
推荐指数
1
解决办法
1972
查看次数