如何执行混合查询?

DuckDB与PostgreSQL的无缝融合:pg_duckdb如何简化混合数据分析工作流 本文详细介绍了pg_duckdb如何实现DuckDB与PostgreSQL的无缝融合,简化混合数据分析工作流。通过双重执行机制和数据类型兼容性,pg_duckdb显著提升了OLAP查询性能,同时支持对象存储集成和数据导出功能。文章还提供了安装配置指南、性能优化技巧和实际应用案例,帮助开发者高效利用列矢量化分析引擎优化数据分析流程。 阅读详情

图片

本文字数:9866;估计阅读时间:25 分钟

作者:Mark Needham

审校:庄晓东(魏庄)

本文在公众号【ClickHouseInc】首发

在我意识到:人们用ClickHouse的大部分时间里,我们理解它是一个带有传统客户端-服务器架构的分析数据库,旨在以低延迟为高并发查询提供服务。

直到最近几个月,我才被这样几个工具改变了我的理解:ClickHouse Local,它允许我们通过CLI运行ClickHouse前端的进程内版本,以及chDB,一个由ClickHouse驱动的嵌入式SQL OLAP引擎。

在为ClickHouse YouTube频道录制的大多数视频中,我发现自己在混合使用这些工具。

最值得注意的例外是那段视频,其中通过ClickPy解释了Materialized Views。ClickPy是一个托管在ClickHouse Cloud上的ClickHouse服务,包含有关从Python的PyPi包管理器下载软件包的数据。该数据集帮助我们了解长期以来最受欢迎的软件包,按国家、安装程序、版本和许多其他维度分组。

数据库还包含有关每个软件包的元数据,包括项目主页,通常是GitHub代码库。这让我想到,将这些库的GitHub指标(例如星标数或分叉数)与下载数进行比较可能会很有趣。

我询问了我的同事戴尔,是否可以将GitHub数据添加到ClickPy服务器上,他建议我首先查看ClickHouse的remote和remoteSecure表函数。这些函数允许您从另一个ClickHouse客户端动态查询远程ClickHouse服务器。我们还可以将远程查询的数据与本地ClickHouse中的数据进行连接(join),当与ClickHouse Local一起使用时,我们可以实现一种混合查询。

我应该指出,这不是当前ClickHouse的优化用例,但我认为这将是一个有趣的实验,所以让我们开始吧!

使用ClickHouse Local查询GitHub指标

我先编写了一个小Python脚本,从GitHub API下载尽可能多的项目的数据,将每个项目存储在自己的机器上的一个JSON文件中。例如,以下是Langchain项目数据的子集:

{
    "id": 552661142,
    "node_id": "R_kgDOIPDwlg",
    "name": "langchain",
    "full_name": "langchain-ai/langchain",
...
    "topics": [],
    "visibility": "public",
    "forks": 10190,
    "open_issues": 2109,
    "watchers": 69585,
    "default_branch": "master",
...
    "subscribers_count": 606
}

我们将使用ClickHouse Local探索这些文件,让我们在本地的机器上启动它:

./clickhouse local -m

我们可以运行以下查询来查找根据GitHub星标最受欢迎的PyPi软件包:

FROM file('data/*.json', JSONEachRow)
SELECT full_name, stargazers_count AS stars, forks
ORDER BY stargazers_count DESC
LIMIT 10;

┌─full_name────────────────┬──stars─┬─forks─┐
│ huggingface/transformers │ 116073 │ 23147 │
│ langchain-ai/langchain   │  69585 │ 10190 │
│ tiangolo/fastapi         │  65210 │  5519 │
│ yt-dlp/yt-dlp            │  60914 │  4994 │
│ keras-team/keras         │  59836 │ 19477 │
│ ansible/ansible          │  59352 │ 23867 │
│ openai/whisper           │  51217 │  5828 │
│ localstack/localstack    │  50301 │  3822 │
│ Textualize/rich          │  45582 │  1686 │
│ psf/black                │  35545 │  2339 │
└──────────────────────────┴────────┴───────┘


10 rows in set. Elapsed: 0.140 sec. Processed 2.08 thousand rows, 14.97 MB (14.91 thousand rows/s., 107.28 MB/s.)

Peak memory usage: 48.50 KiB.

我想看到在GitHub上受欢迎的生成式AI应用程序中使用的许多库,这并不太令人惊讶。

在ClickHouse Cloud上查询受欢迎的PyPi项目

现在,我们需要确定ClickPy数据库中的哪些项目的项目主页是GitHub仓库。让我们首先使用只读的play用户连接到ClickPy数据库:

./clickhouse client -m \
  -h clickpy-clickhouse.clickhouse.com \
  --user play --secure

现在让我们编写一个查询,找出具有GitHub仓库的最受欢迎的PyPi项目。我们将通过连接pypi_downloads和projects表来实现这一点。我们直接在服务器上运行以下内容:

SELECT name, 
       replaceOne(home_page, 'https://github.com/', '') AS repository,
       sum(count) AS count

FROM pypi.pypi_downloads AS downloads
INNER JOIN (
  SELECT name, argMax(home_page, version) AS home_page
  FROM pypi.projects
  GROUP BY name
) AS projects ON projects.name = downloads.project
WHERE projects.home_page LIKE '%github%'
GROUP BY ALL
ORDER BY count DESC
LIMIT 10;

┌─name───────────────┬─repository─────────────────┬───────count─┐
│ boto3              │ boto/boto3                 │ 16031894410 │
│ botocore           │ boto/botocore              │ 11033306159 │
│ certifi            │ certifi/python-certifi     │  8606959885 │
│ s3transfer         │ boto/s3transfer            │  8575775398 │
│ python-dateutil    │ dateutil/dateutil          │  8144178765 
│ charset-normalizer │ Ousret/charset_normalizer  │  5891178066 │
│ jmespath           │ jmespath/jmespath.py       │  5405618311 │
│ pyasn1             │ pyasn1/pyasn1              │  5378303214 │
│ google-api-core    │ googleapis/python-api-core │  5022394699 │
│ importlib-metadata │ python/importlib_metadata  │  4353215364 │
└────────────────────┴────────────────────────────┴─────────────┘

10 rows in set. Elapsed: 0.260 sec. Processed 12.28 million rows, 935.69 MB (47.16 million rows/s., 3.59 GB/s.)

Peak memory usage: 1.02 GiB.

让我们看一个显示不同数据位于何处的图表。

图片

配置远程查询的权限

接下来我想要做的是:将查找PyPi项目的查询,与返回GitHub指标的查询合并起来。主要的挑战是PyPi数据存储在Clickhouse Cloud上,而GitHub指标存储在我本地的机器上。

我不想用我的GitHub数据污染ClickHouse Cloud实例,所以我将使用remoteSecure表函数从我的机器查询ClickHouse Cloud。为了使用这个函数来连接projects和pypi_downloads表,我们需要创建一个具有以下权限的用户:

GRANT CREATE TEMPORARY TABLE, REMOTE ON *.* TO <user>

一旦我在ClickPy服务器上创建了一个名为_mark_的用户,并给予了这个权限,我们就可以回到我们的ClickHouse Local会话,并将密码定义为一个参数:

set param_password = 'my-password';

从ClickHouse Local查询ClickHouse Cloud

现在我们将运行以上查询的一个版本,使用remoteSecure函数找到最受欢迎的PyPi项目。

SELECT name, 

       replaceOne(home_page, 'https://github.com/', '') AS repository,
       sum(count) AS count
FROM remoteSecure(
  'clickpy-clickhouse.clickhouse.com',
  'pypi.pypi_downloads',
  'mark', {password:String}
) AS pypi_downloads
INNER JOIN
(
    SELECT name, argMax(home_page, version) AS home_page
    FROM remoteSecure(
      'clickpy-clickhouse.clickhouse.com', 
      'pypi.projects',
      'mark', {password:String} 
    )
    GROUP BY name
) AS projects ON projects.name = pypi_downloads.project

WHERE projects.home_page LIKE '%github%'

GROUP BY ALL
ORDER BY count DESC
LIMIT 10;

┌─name───────────────┬─repository─────────────────┬───────count─┐
│ boto3              │ boto/boto3                 │ 16031894410 │
│ botocore           │ boto/botocore              │ 11033306159 │
│ certifi            │ certifi/python-certifi     │  8606959885 │
│ s3transfer         │ boto/s3transfer            │  8575775398 │
│ python-dateutil    │ dateutil/dateutil          │  8144178765 │
│ charset-normalizer │ Ousret/charset_normalizer  │  5891178066 │
│ jmespath           │ jmespath/jmespath.py       │  5405618311 │
│ pyasn1             │ pyasn1/pyasn1              │  5378303214 │
│ google-api-core    │ googleapis/python-api-core │  5022394699 │
│ importlib-metadata │ python/importlib_metadata  │  4353215364 │
└────────────────────┴────────────────────────────┴─────────────┘

10 rows in set. Elapsed: 1.703 sec.

正如我们所期望的那样,我们得到了与之前相同的结果。这个查询运行时间较长,因为虽然JOIN是在ClickPy服务器上完成的,但我们每次运行查询时都会初始化到ClickPy服务器的新连接。我们可以通过在查询前加上EXPLAIN PLAN来检查连接是否是远程完成的,这将返回以下内容:

┌─explain───────────────────────────────────┐
│ ReadFromRemote (Read from remote replica) │
└───────────────────────────────────────────┘

如果JOIN是在本地执行的,我们将在查询计划中看到Join操作符。

将来自ClickHouse Cloud和ClickHouse Local的数据进行连接(Join)

接下来,让我们将这些数据与本地GitHub数据集进行连接(join):

SELECT
    projects.name,
    replaceOne(home_page, 'https://github.com/', '') AS repository,
    sum(count) AS count,
    gh.stargazers_count AS stars
FROM remoteSecure(
  'clickpy-clickhouse.clickhouse.com', 
  'pypi.pypi_downloads', 
  'mark', {password:String}
) AS pypi_downloads
INNER JOIN
(
    SELECT name, argMax(home_page, version) AS home_page
    FROM remoteSecure(
      'clickpy-clickhouse.clickhouse.com', 
      'pypi.projects', 
      'mark', {password:String}
    )
    GROUP BY name
) AS projects ON projects.name = pypi_downloads.project
INNER JOIN
(
    SELECT *
    FROM file('data/*.json', JSONEachRow)
) AS gh ON gh.svn_url = projects.home_page

GROUP BY ALL
ORDER BY stars DESC
LIMIT 10;

这产生了以下输出:

┌─projects.name────────────┬─repository───────────────┬─────count─┬──stars─┐
│ in-transformers          │ huggingface/transformers │       881 │ 116073 │
│ richads-transformers     │ huggingface/transformers │      1323 │ 116073 │
│ transformers-machinify   │ huggingface/transformers │       999 │ 116073 │
│ transformers-phobert     │ huggingface/transformers │      4550 │ 116073 │
│ transformers             │ huggingface/transformers │ 302008339 │ 116073 │
│ langchain                │ langchain-ai/langchain   │  35657607 │  69585 │
│ langchain-by-johnsnowlabs│ langchain-ai/langchain   │       565 │  69585 │
│ langchain-core           │ langchain-ai/langchain   │   2440921 │  69585 │
│ gigachain-core           │ langchain-ai/langchain   │      4181 │  69585 │
│ langchain-community      │ langchain-ai/langchain   │   1438159 │  69585 │
│ gigachain-community      │ langchain-ai/langchain   │      1914 │  69585 │
│ yt-dlp-custom            │ yt-dlp/yt-dlp            │       948 │  60914 │
│ yt-dlp                   │ yt-dlp/yt-dlp            │  86175495 │  60914 │
│ keras                    │ keras-team/keras         │ 374424308 │  59836 │
│ keras-nightly            │ keras-team/keras         │  20349029 │  59836 │
│ symai-whisper            │ openai/whisper           │       790 │  51217 │
│ test10101010101          │ openai/whisper           │        46 │  51217 │
│ whisper-openai           │ openai/whisper           │     11486 │  51217 │
│ openai-whisper           │ openai/whisper           │   2029106 │  51217 │
│ localstack               │ localstack/localstack    │   3998353 │  50301 │
└──────────────────────────┴──────────────────────────┴───────────┴────────┘
20 rows in set. Elapsed: 3.704 sec. Processed 12.28 million rows, 950.66 MB (3.31 million rows/s., 256.66 MB/s.)

Peak memory usage: 339.80 MiB.

huggingface/transformers,langchain-ai/langchain和openai/whisper重复出现多次。这是因为有不同的PyPi项目使用相同的GitHub存储库作为它们的主页。其中一些看起来像是真正不同的项目,但其他一些似乎是主项目的废弃分支。

这个查询运行时间接近4秒,因为在执行与GitHub数据的连接之前,正在将projects和pypi_downloads表的连接结果流式传输到我的ClickHouse Local实例。我们可以看到下面的图表显示了这是如何工作的:

图片

除了keras和transformers,大多数下载量较大的软件包都没有出现在我们的列表中。我们可以通过将ORDER BY子句更改为按下载次数,而不是星数进行排序,来找出这些软件包有多少星数。我们需要更改以下行:\

ORDER BY stars DESC

改为:

ORDER BY count DESC

如果我们运行具有这个更改的查询,我们将看到以下输出:

┌─projects.name──────┬─repository─────────────────┬───────count─┬─stars─┐
│ boto3              │ boto/boto3                 │ 16031894410 │  8440 │
│ botocore           │ boto/botocore              │ 11033306159 │  1352 │
│ certifi            │ certifi/python-certifi     │  8606959885 │   707 │
│ s3transfer         │ boto/s3transfer            │  8575775398 │   189 │
│ python-dateutil    │ dateutil/dateutil          │  8144178765 │  2164 │
│ charset-normalizer │ Ousret/charset_normalizer  │  5891178066 │   448 │
│ jmespath           │ jmespath/jmespath.py       │  5405618311 │  1975 │
│ pyasn1             │ pyasn1/pyasn1              │  5378303214 │    18 │
│ google-api-core    │ googleapis/python-api-core │  5022394699 │    98 │
│ importlib-metadata │ python/importlib_metadata  │  4353215364 │   101 │
└────────────────────┴────────────────────────────┴─────────────┴───────┘

10 rows in set. Elapsed: 3.957 sec. Processed 11.96 million rows, 941.07 MB (3.02 million rows/s., 237.81 MB/s.)

Peak memory usage: 336.19 MiB.

大多数这些项目在GitHub上并没有受到太多关注!查询仍然需要4秒,但通过这个查询,我们可以加快速度,因为我们是按照远程表上的字段进行排序的。这意味着我们可以通过远程连接返回的记录数量,如下图所示:

图片

让我们将记录数限制为1,000条,如下面的查询所示:

WITH pypiProjects AS (
  SELECT home_page, projects.name, sum(count) AS count
  FROM remoteSecure(
    'clickpy-clickhouse.clickhouse.com',
    'pypi.pypi_downloads',
    'mark', {password:String}
  ) AS pypi_downloads
  INNER JOIN
  (
    SELECT name, argMax(home_page, version) AS home_page
    FROM remoteSecure(
      'clickpy-clickhouse.clickhouse.com',
      'pypi.projects',
      'mark', {password:String}
    )
    GROUP BY name
  ) AS projects ON projects.name = pypi_downloads.project
  GROUP BY ALL 
  ORDER BY count DESC 
  LIMIT 1000
) 
SELECT
    name,
    replaceOne(home_page, 'https://github.com/', '') AS repository,
    count,
    gh.stargazers_count AS stars
FROM pypiProjects
INNER JOIN
(
    SELECT *
    FROM file('data/*.json', JSONEachRow)
) AS gh ON gh.svn_url = pypiProjects.home_page
GROUP BY ALL
ORDER BY count DESC
LIMIT 10;

┌─name───────────────┬─repository─────────────────┬───────count─┬─stars─┐
│ boto3              │ boto/boto3                 │ 16031894410 │  8440 │
│ botocore           │ boto/botocore              │ 11033306159 │  1352 │
│ certifi            │ certifi/python-certifi     │  8606959885 │   707 │
│ s3transfer         │ boto/s3transfer            │  8575775398 │   189 │
│ python-dateutil    │ dateutil/dateutil          │  8144178765 │  2164 │
│ charset-normalizer │ Ousret/charset_normalizer  │  5891178066 │   448 │
│ jmespath           │ jmespath/jmespath.py       │  5405618311 │  1975 │
│ pyasn1             │ pyasn1/pyasn1              │  5378303214 │    18 │
│ google-api-core    │ googleapis/python-api-core │  5022394699 │    98 │
│ importlib-metadata │ python/importlib_metadata  │  4353215364 │   101 │
└────────────────────┴────────────────────────────┴─────────────┴───────┘
10 rows in set. Elapsed: 1.758 sec. Processed 2.08 thousand rows, 14.97 MB (1.18 thousand rows/s., 8.51 MB/s.)

Peak memory usage: 448.22 MiB.

这次运行时间不到2秒,因为在执行与GitHub数据的连接之前,我们在将如此多的记录流式传输到ClickHouse Local之前。然而,这并不是一个完美的解决方案,因为如果我们的1,000条记录中有超过990条没有在GitHub数据集中找到匹配项,那么我们可能最终只得到少于10条记录。

总结

目前就是这样。我很好奇你们都有什么看法?你能看到这个功能的真实用例吗?如果是的话,请在评论中或在ClickHouse Slack上告诉我们。

图片

​​联系我们

手机号:13910395701

邮箱:Tracy.Wang@clickhouse.com

满足您所有的在线分析列式数据库管理需求

开源向量数据库生产级选型:性能边界与混合查询实测 向量数据库是AI应用落地的核心基础设施,其本质是将高维向量检索与结构化属性过滤深度融合的特种数据库。理解其工作原理需穿透‘支持HNSW’‘支持过滤’等表层功能,深入查询解析、索引协同、执行计划生成等底层机制。不同实现对混合查询(如语义相似+多条件过滤)的处理逻辑差异巨大——有的在服务端联合优化,有的退化为全量扫描,有的甚至交由客户端承担。这种设计取舍直接决定系统在高并发、资源受限或复杂业务规则下的稳定性与延迟表现。本文基于Milvus、Qdrant、Chroma、Weaviate四款主流开源向量数据库的真实 阅读详情

相关推荐

37、LINQ查询:语法、执行机制与策略

本文详细介绍了LINQ查询的基础语法、执行机制以及优化策略。内容涵盖查询语法与流畅语法的对比、延迟执行与重新评估的特性、子查询和组合查询的使用,以及在不同场景下的应用和性能优化建议。通过掌握这些内容,开发者可以更高效地处理各种数据查询需求。

p4q5r6s7t的博客 38

【LangChain】SQL

您还可以自定义所使用的prompt。这是一个prompt示例:它理解foobar与Employee表是相同的;

山鬼谣的专栏 1万+

微信Dat文件转图片(文末含工具下载)

PC端微信dat图片转换为jpg格式

weixin_40704848的博客 8079

使用Langchain构建简单的数据库Agent

这篇文章我们介绍一个使用LangChain实现SQLagent的方法,LangChain直接内置了自己的SQLagent实现-—SQLDatabaseChain。这个方法使用 SQL Alchemy 与数据库交互。感兴趣的可以考虑一下这两个方案是否可以融合,这样保证SQL的准确性从而提升最终结果的准确率。下面将介绍今天主要内容的实现步骤:实现步骤首先,我们得有一个数据库。这里我们用的是ClickHouse,一个开源的、面向列的SQL数据库管理系统,特别适合大数据分析。安装起来超级简单,一行命令就搞定。

m0_59235245的博客 1579

跨境TRS投资操作指南与系统解决方案

3 点击【申请 TRS 账户】,查看风险披露,录入账户参数、确定录入的参数信息,进行身份验证,输入验证码,TRS 账户开户申请已提交,后台对已提交的 TRS 开户申请进行审核,审核成功后,短信邮箱提醒,进行登录;2.点击【申请TRS账户】,查看风险披露,录入账户参数、确定录入的参数信息,进行身份验证,输入验证码,TRS账户开户申请已提交,后台对已提交的TRS开户申请进行审核,审核成功后,短信邮箱提醒,进行登录;4)更广泛的投资选择:相比A股通,TRS可以交易更多的A股标的,提供了更广泛的投资选择。

2401_85487119的博客 2842

Win10+pycharm+conda 配置Siammask 过程记录(新手向)

我们跑动demo 需要配置两个相关的文件这两个文件需要用 git 进行下载,对于不熟悉git的小伙伴 我这里给出连接,大家可以直接下载即可,并将其配置在 experiments文件夹下然后大家再需要在设置参数参数这里给出了。

C1137577723的博客 550

LangChain - 为何我们选择 ClickHouse 作为 LangSmith 的动力

本文字数:4742;估计阅读时间:12 分钟作者:Ankush Gola审校:庄晓东(魏庄)本文在公众号【ClickHouseInc】首发“我们在使用 ClickHouse 方面有着良好的经历。它使我们能够将 LangSmith 扩展到生产环境,并提供一个用户可以记录所有数据的服务。如果没有 ClickHouse,我们无法取得这样的成就。

ClickHouseDB的博客 1280

PyTorch生成式人工智能(7)——生成对抗网络(Generative Adversarial Network, GAN)实践详解

生成对抗网络 (Generative Adversarial Network, GAN) 最早由 Ian Goodfellow 于 2014 年提出,其中生成器试图创建与真实样本无法区分的数据样本,而判别器则试图区分生成器生成的样本与真实样本。在本节中,我们将介绍 GAN 的理论基础。然后,介绍如何使用 PyTorch 从零开始构建 GAN,以便了解所有细节,深入理解 GAN 的内部工作原理,为后续讨论 GAN 的其他更高级内容奠定基础,比如生成高分辨率图像或逼真的音乐。

盼小辉丶的博客 1万+

用ClickHouse创建高效的矢量存储解决方案

ClickHouse为实时应用提供了高效的矢量存储解决方案。这篇文章简要介绍了设置、管理和查询矢量存储的方法。ClickHouse文档Langchain API参考。

ppoojjj的博客 518

STM32 驱动直流无刷电机(BLDC)发声

STM32 驱动直流无刷电机(BLDC)发声

perseverance51博客 3400

C#:实现统计图像主颜色的算法(附完整源码)

C#:实现统计图像主颜色的算法(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 517

Milvus 标量与向量混合查询:Scalar Filtering 的执行计划分析

向量检索与关系型标量过滤的结合,是分布式数据库领域最精妙的博弈场。“理解选择率的物理临界点,超小租户用 Partition 物理隔离,高频标量建倒排位图,避开 1% 中等选择率的图断裂陷阱”,才能让你的海量混合检索集群在任意复杂的布尔条件约束下,始终保持如丝般顺滑的巅峰性能。

2401_87746054的博客 823

华为服务器BMC方式安装系统-官方文档解读

华为服务器BMC方式安装系统 安装完成之后我们有两种方式去安装系统, > 一、服务器连接显示屏、键盘、鼠标和启动盘去启动服务器安装系统(弊端:需要制作单独启动盘并且需要硬件资源) > 二、使用BMC方式安装系统,也就是说使用网线连接我们的笔记本和服务器的BMC口或者mgt口去进行安装。

王明的博客 4579

pgvector 0.7+升级核心变化:HNSW索引、向量类型与混合查询执行计划重构

向量数据库检索本质上是高维空间中的近似最近邻搜索,其性能与精度取决于索引结构、距离度量和查询优化机制。pgvector自0.7.0起将底层架构从依赖PostgreSQL原生GIN/GIST索引的扩展模式,升级为具备独立语义层的HNSW混合引擎,引入vector(n)原生类型、操作符类绑定及索引级WHERE下推能力。这一转变直接影响召回质量、执行计划路径与混合过滤效率,尤其在跨模态检索、推荐系统等场景中,需重新评估归一化策略、m/ef参数组合及maintenance_work_mem配置。本文基于COCO-2

weixin_32932149的博客 236

(九)DFI接口时序

文章目录一、DFI Interface 一、DFI Interface   DFI接口是连接DDR Controller与DDR_PHY之间的通用接口,其信号组如下表:       

Mr.翟的博客 1万+

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

php和html混合写 先执行哪个_为什么 SQL 查询不是先执行 SELECT 语句?

很多 SQL 查询都是以 SELECT 开始的。不过,最近我跟别人解释什么是窗口函数,我在网上搜索”是否可以对窗口函数返回的结果进行过滤“这个问题,得出的结论是”窗口函数必须在 WHERE 和 GROUP BY 之后,所以不能”。于是我又想到了另一个问题:SQL 查询的执行顺序是怎样的?好像这个问题应该很好回答,毕竟自己已经写了上万个 SQL 查询了,有一些还很复杂。但事实是,我仍然很难确切地说出...

weixin_39861918的博客 92

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Elasticsearch混合搜索深度解析(下):执行机制与完整流程

直接查看源码是理解复杂系统的最佳方式,比文档更准确、更深入。

工业 AI 工程手记 625

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

oracle 混合分区表,Oracle 19c 新特性:混合分区表Hybrid partitioned tables强体验

PDB1@ZRP>select * from hybrid_test partition (sales_2019);REGION TIME_ID AMOUNT------ ------------------- ----------EAST 2019-01-01 00:00:00 1032EAST 2019-01-02 00:00:00 ...

weixin_32836671的博客 195

(Ubuntu下linux编程) 第14章 《数据》,50~51页,执行批量SQL语句,Multi-StatementsOption,连续执行建表,插入数据,查询,却不能得到结果的问题

将书上的源代码稍微修改了一下,增加了22行,27~31行,以便在执行建表,插入数据,之后,再查询数据,得到查询结果。数据库里面查询的结果如下,明明数据已经插入了表内。运行结果如下,得到了查询结果。运行结果如下,得不到查询结果。

yanzhenxi的博客 453

KaiwuDB跨模查询实战:时序与关系数据混合处理

数据库的跨模查询技术实现了时序数据与关系型数据的统一处理,其核心原理是通过混合计算引擎自动识别不同数据特征,并优化查询执行路径。这项技术显著提升了金融风控、实时监控等场景的开发效率,避免了传统方案中多数据库协同的复杂性。以KaiwuDB为例,其内置的时序-关系关联算子支持递归CTE处理树状结构,同时通过智能分区策略优化查询性能。在A股产业链分析等典型场景中,跨模查询既能处理股权穿透等关系运算,又能实时关联股价波动时序数据,展现了混合数据处理的独特价值。

weixin_33883104的博客 259

OceanBase存储引擎混合存储:行存与列存协同查询优化终极指南

OceanBase作为蚂蚁集团开发的分布式关系型数据库,其存储引擎混合存储技术将行存储与列存储完美结合,实现了高性能查询优化。这种创新的存储架构让OceanBase在HTAP场景下表现出色,为企业级应用提供了强大的数据处理能力。🚀 ## 混合存储架构解析 OceanBase的存储引擎采用**行列混合存储**架构,通过智能的数据组织方式,在同一个数据库中同时支持行存储和列存储。这种设计让Oce

gitblog_00096的博客 674

在需要同时处理结构化数据(如用户标签)和向量数据的场景中,如何设计高效的混合存储与查询引擎?

实验显示混合方案在复杂查询场景下性能提升达2.7倍,内存消耗降低58%(因过滤后向量集缩小)。该架构已在某头部电商推荐系统上线,支撑日均20亿次混合查询。构建基于ColBERT的量化向量索引,使用PQ(Product Quantization)将768维向量压缩至64字节,实现10^9规模向量的内存驻留。采用Delta Lake存储用户标签等结构化数据,支持ACID事务与版本回溯,利用Z-Order索引加速多列过滤(如。为特征维度,记录结构化主键与向量ID的对应关系。由学习到的注意力权重动态调整。

weixin_45422672的博客 540

TimescaleDB Hypercore引擎:混合行列存储的极致优化

TimescaleDB Hypercore引擎:混合行列存储的极致优化 【免费下载链接】timescaledb timescale/timescaledb: 是一个分布式时间序列数据库,它基于 PostgreSQL 数据库提供高性能的时间序列数据存储和处理。适合用于存储和处理大规模的时间序列数据,特别是对于需要高吞吐量、...

gitblog_01013的博客 1238

【SQL+向量数据库智能优化】:揭秘下一代查询性能飞跃的5大核心技术

提升查询性能新范式!基于SQL+向量数据库:智能查询优化,融合向量化执行、AI索引推荐、查询计划预测、混合负载调度与自适应缓存五大技术,显著加速复杂分析场景。适用于实时分析、大模型增强等应用,性能提升可达10倍以上,值得收藏。

Algorift的博客 460

用python实现混合检索

另外,对于大规模的图像数据,你可能需要使用专门的图像搜索引擎,如Elasticsearch的Elasticsearch Image Search插件或FAISS等。混合检索,或者称为多模态检索,通常涉及结合不同类型的数据进行搜索,比如文本、图像、音频和视频等。以下是一个简单的混合检索示例,使用Python和Elasticsearch来实现文本和图像的混合检索。为了简化,我们将只使用文本和图像的URL。现在,我们可以编写一个混合检索函数,该函数接受文本和图像URL作为输入,并返回与这些条件匹配的文档。

ducanwang的博客 742
上一篇: 使用ClickHouse进行SQL动态列选择
下一篇: 加速您的ClickHouse查询
ClickHouseDB
博客等级 码龄3年 1707粉丝 320原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值