小编Joe*_*ard的帖子

Python 的 Fork-Join 模型实现?(相当于Java的ForkJoinPool)

我正在寻找Python 的fork-join 模型的实现。作为 Java 的 ForkJoinPool,它应该允许将一个任务的工作递归地拆分(fork)为多个子任务。子任务完成后,结果将被连接并返回。理想情况下,它应该支持类似于concurrent.futures中的ThreadPoolExecutor和ProcessPoolExecutor的线程和进程,但目前线程更重要。它必须允许限制线程数量(我希望每个核心有一个线程)。我知道这只有在代码释放 GIL 时才有用。

维基百科的示例用于阐明 fork-join 模型:

solve(problem):
    if problem is small enough:
        solve problem directly (sequential algorithm)
    else:
        for part in subdivide(problem)
            fork subtask to solve(part)
        join all subtasks spawned in previous loop
        return combined results
Run Code Online (Sandbox Code Playgroud)

Python中有这样的库吗?我找不到。

python parallel-processing fork-join python-3.x

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

如何在 LightGBM 中实现与二进制目标相同行为的自定义 logloss?

我正在尝试为二进制分类实现我自己的损失函数。首先,我想重现二进制目标的确切行为。特别是,我希望:

  • 两个函数的损失具有相同的规模
  • 训练和验证斜率相似
  • predict_proba(X) 返回概率

下面的代码不是这种情况:

import sklearn.datasets
import lightgbm as lgb
import numpy as np

X, y = sklearn.datasets.load_iris(return_X_y=True)
X, y = X[y <= 1], y[y <= 1]

def loglikelihood(labels, preds):
    preds = 1. / (1. + np.exp(-preds))
    grad = preds - labels
    hess = preds * (1. - preds)
    return grad, hess

model = lgb.LGBMClassifier(objective=loglikelihood)  # or "binary"
model.fit(X, y, eval_set=[(X, y)], eval_metric="binary_logloss")
lgb.plot_metric(model.evals_result_)
Run Code Online (Sandbox Code Playgroud)

目标=“二进制”:

在此处输入图片说明

使用objective=loglikelihood,斜率甚至不平滑:

在此处输入图片说明

此外,必须将 sigmoid 应用于 model.predict_proba(X) 以获得对数似然的概率(正如我从https://github.com/Microsoft/LightGBM/issues/2136 中发现的那样)。

是否可以使用自定义损失函数获得相同的行为?有人了解所有这些差异的来源吗?

machine-learning lightgbm

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

"通过对等方重置连接"和"太多打开文件"异常将尝试扩展Vert.x服务器

我试图在Mac OS X上测试Java Vert.x网络服务器(基于Netty)的可扩展性.为此,我将连接限制增加到100万:

sudo sysctl -w kern.maxfiles=1000200
sudo sysctl -w kern.maxfilesperproc=1000100
sudo ulimit -n 1000000
Run Code Online (Sandbox Code Playgroud)

然后我创建了localhost别名:

for i in `seq 200 250`; do sudo ifconfig lo0 alias 172.16.123.$i ; done
Run Code Online (Sandbox Code Playgroud)

我现在能够连接到这些IP地址; 但是,在大约1000-2000个已建立的连接之后,我得到"通过对等连接重置"连接:

java.net.SocketException: Connection reset by peer
    at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
    at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:712)
    at io.netty.channel.socket.nio.NioSocketChannel.doFinishConnect(NioSocketChannel.java:191)
    at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:228)
    at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:497)
    at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:447)
Run Code Online (Sandbox Code Playgroud)

它们之后是"太多打开文件"例外:

Caused by: java.net.SocketException: Too many open files
    at sun.nio.ch.Net.socket0(Native Method)
    at sun.nio.ch.Net.socket(Net.java:393)
    at sun.nio.ch.Net.socket(Net.java:386)
    at sun.nio.ch.SocketChannelImpl.<init>(SocketChannelImpl.java:104)
    at sun.nio.ch.SelectorProviderImpl.openSocketChannel(SelectorProviderImpl.java:60)
    at java.nio.channels.SocketChannel.open(SocketChannel.java:145)
    at io.netty.channel.socket.nio.NioSocketChannel.newSocket(NioSocketChannel.java:48)
Run Code Online (Sandbox Code Playgroud)

有趣的是,当我列出所有与netstat的连接时,我发现FIN_WAIT_1状态中有很多连接:

tcp4       0    213  172.16.123.230.55618   172.16.123.230.8877 …
Run Code Online (Sandbox Code Playgroud)

macos scalability websocket netty vert.x

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

使用JavaScript获取widgetVar或选中/取消选中所有其他PrimeFaces复选框

我在页面上有几个PrimeFaces复选框.如果单击主复选框,则应选中/取消选中所有其他复选框.使用纯HTML复选框,这将是一个简单的问题.但由于PrimeFaces不显示复选框本身,而是显示图像,因此以下JavaScript代码不起作用:

<script type="text/javascript">
$(document).ready(function() {
    var masterCheckbox = $(".ui-chkbox.master :checkbox");
    var slaveCheckboxes = $(".ui-chkbox:not(.master) :checkbox");

    updateMaster();
    masterCheckbox.change(updateSlaves);
    slaveCheckboxes.change(updateMaster);

    function updateMaster() {
        var allSlavesChecked = true;
        slaveCheckboxes.each(function() {
            if (!$(this).is(':checked')) {
                allSlavesChecked = false;
            }
        });
        masterCheckbox.attr("checked", allSlavesChecked);
    }

    function updateSlaves() {
        var masterChecked = masterCheckbox.is(":checked");
        slaveCheckboxes.each(function() {
            $(this).attr("checked", masterChecked);
        });
    }
});
</script>
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用PrimeFaces widgetVar切换复选框,但我不知道如何使用JavaScript获取PrimeFaces小部件对象.我认为RichFaces将组件属性添加到DOM元素,但PrimeFaces没有.有人知道这个问题的解决方案吗?

javascript jquery jsf primefaces

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

仅使用 onBackPressureLatest() 消耗最新项目

我有一个定期发出物品的生产者和一个有时非常慢的消费者。重要的是,消费者只使用最近的商品。我认为 onBackPressureLatest() 是这个问题的完美解决方案。于是我写了如下测试代码:

PublishProcessor<Integer> source = PublishProcessor.create();
source
        .onBackpressureLatest()
        .observeOn(Schedulers.from(Executors.newCachedThreadPool()))
        .subscribe(i -> {
            System.out.println("Consume: " + i);
            Thread.sleep(100);
        });

for (int i = 0; i < 10; i++) {
    System.out.println("Produce: " + i);
    source.onNext(i);
}
Run Code Online (Sandbox Code Playgroud)

我预计它会记录类似以下内容:

Produce: 0
...
Produce: 9
Consume: 0
Consume: 9
Run Code Online (Sandbox Code Playgroud)

相反,我得到

Produce: 0
...
Produce: 9
Consume: 0
Consume: 1
...
Consume: 9
Run Code Online (Sandbox Code Playgroud)

onBackPressureLatest() 和 onBackPressureDrop() 都没有任何效果。只有 onBackPressureBuffer(i) 会引发异常。

我使用 rxjava 2.1.9。你知道问题/我的误解可能是什么吗?

java rx-java2

3
推荐指数
1
解决办法
1112
查看次数