我为图像构建了一个像素分类器,对于图像中的每个像素,我想定义它属于哪个预定义的颜色簇。它有效,但每张图像大约 5 分钟,我想我正在做一些肯定可以优化的非 Pythonic 的事情。
我们如何将函数直接映射到列表列表上?
#First I convert my image to a list
#Below list represents a true image size
list1=[[255, 114, 70],
[120, 89, 15],
[247, 190, 6],
[41, 38, 37],
[102, 102, 10],
[255,255,255]]*3583180
Run Code Online (Sandbox Code Playgroud)
然后我们定义了将颜色映射到的集群以及执行此操作的函数(取自PIL 库)
#Define colors of interest
#Colors of interest
RED=[255, 114, 70]
DARK_YELLOW=[120, 89, 15]
LIGHT_YELLOW=[247, 190, 6]
BLACK=[41, 38, 37]
GREY=[102, 102, 10]
WHITE=[255,255,255]
Colors=[RED, DARK_YELLOW, LIGHT_YELLOW, GREY, BLACK, WHITE]
#Function to find closes cluster by root and squareroot distance …Run Code Online (Sandbox Code Playgroud) 这是从大多数Pythonic方式将pandas单元与条件连接起来的观察\n我无法理解为什么第三个解决方案比第一个解决方案需要更多的内存。
\n如果我不采样第三个解决方案不会给出运行时错误,显然有些事情很奇怪
\n为了模拟大型数据帧,我尝试重新采样,但没想到会遇到这种错误
\n非常不言自明,一行,看起来Pythonic
\ndf[\'city\'] + (df[\'city\'] == \'paris\')*(\'_\' + df[\'arr\'].astype(str))\nRun Code Online (Sandbox Code Playgroud)\ns = """city,arr,final_target\nparis,11,paris_11\nparis,12,paris_12\ndallas,22,dallas\nmiami,15,miami\nparis,16,paris_16"""\nimport pandas as pd\nimport io\ndf = pd.read_csv(io.StringIO(s)).sample(1000000, replace=True)\ndf\nRun Code Online (Sandbox Code Playgroud)\n速度
\ns = """city,arr,final_target\nparis,11,paris_11\nparis,12,paris_12\ndallas,22,dallas\nmiami,15,miami\nparis,16,paris_16"""\nimport pandas as pd\nimport io\ndf = pd.read_csv(io.StringIO(s)).sample(1000000, replace=True)\ndf\nRun Code Online (Sandbox Code Playgroud)\n%%timeit\ndf[\'city\'] + (df[\'city\'] == \'paris\')*(\'_\' + df[\'arr\'].astype(str))\n# 877 ms \xc2\xb1 19.2 ms per loop (mean \xc2\xb1 std. dev. of 7 runs, 1 loop each)\nRun Code Online (Sandbox Code Playgroud)\n%%timeit\ndf[\'final_target\'] = np.where(df[\'city\'].eq(\'paris\'), \n …Run Code Online (Sandbox Code Playgroud) 我有两组大的 2D 点,我需要计算一个距离矩阵。
我需要它在 python 中运行得很快,所以很明显我使用了 numpy。我最近了解了 numpy 广播并使用了它,而不是在 python 中循环,numpy 将在 C 中进行。
我真的认为广播就是我所需要的,直到我看到其他方法比普通广播更好,我有两种计算距离矩阵的方法,但我不明白为什么一种比另一种更好。
我在这里查找https://github.com/numpy/numpy/issues/14761并且我得到了相互矛盾的结果。
下面是两种计算距离矩阵的方法
单元格 [3, 4, 6] 和 [8, 9] 都计算距离矩阵,但 3+4 使用减法。outer 比使用 vanilla 广播的 8 快,使用 hypot 的 6 比 9 快,这很简单道路。我没有尝试在 python 循环中假设它永远不会完成。
我想知道
1. 有没有更快的方法来计算距离矩阵(可能是 scikit-learn 或 scipy)?
2.为什么hypot和subtract.outer这么快?
为了方便起见,我还附上了代码段 tp run 整个事情,并更改了种子以防止缓存恢复
### Cell 1
import numpy as np
np.random.seed(858442)
### Cell 2
%%time
obs = np.random.random((50000, 2))
interp = np.random.random((30000, 2))
CPU times: user 2.02 ms, sys: 1.4 …Run Code Online (Sandbox Code Playgroud) 有没有办法在调用 MAR 之前将模型拆分为多个文件?
例如,如果我有文件base_model.py:
import torch
from torch import nn
class BaseModel(nn.Module):
...
Run Code Online (Sandbox Code Playgroud)
以及继承自的模型BaseModel:
from base_model import BaseModel
class FullModel(BaseModel):
...
Run Code Online (Sandbox Code Playgroud)
对于处理程序来说也是如此。我不知道如何在多个文件之间拆分代码。
我在 sagemaker 推理端点(单实例)上部署了一个自定义模型,在进行负载测试时,我观察到 CPU 利用率指标达到了 100% 的最大值,但根据这篇文章,它应该达到 #vCPU*100% 的最大值。我已确认推理端点未使用 clowdwatch 日志中的所有核心。
因此,如果一个预测调用需要一秒钟处理才能给出响应,则部署的模型每秒只能处理一个 API 调用,如果使用所有 vCPU,则可能会增加到每秒 8 个调用。
AWS Sagemaker部署中是否有任何设置可以使用所有vCPU来提高并发性?
或者我们可以inference.py在部署时在文件内使用多处理 python 包,以便每次调用都到达默认核心,然后所有计算/预测都在任何其他核心中完成,无论该核心在该实例中是空的吗?
python machine-learning amazon-web-services amazon-sagemaker
python ×5
numpy ×3
performance ×2
list ×1
numba ×1
optimization ×1
pandas ×1
python-3.x ×1
pytorch ×1