HTML 之 ollama流式API客户端 -chat模式

手撸简易Agent:Ollama+Docker实现流式多轮本地对话 Agent 是大语言模型从‘能说’走向‘能做’的关键范式,其核心原理在于状态维护、模型调用与响应编排。技术价值体现在降低LLM应用门槛、提升交互实时性与部署可控性。典型应用场景包括企业内部工具自动化、离线环境智能助手及AI原型快速验证。本文聚焦轻量级落地路径,摒弃LangChain等重型框架,基于Ollama本地模型服务与Docker环境封装,实现可调试、可复现的流式多轮对话系统,全程强调透明性与工程可操作性,特别适配Windows/Mac/Linux多平台本地开发与客户现场离线部署需求。 阅读详情

环境变量设置如下:
set OLLAMA_HOST=0.0.0.0:8888
set OLLAMA_ORIGINS=*

ollama流式API客户端

<!DOCTYPE html>
<html lang="zh-CN">
	<head>
		<meta charset="UTF-8">
		<!-- 添加viewport标签确保移动端正确缩放 -->
		<meta name="viewport" content="width=device-width, initial-scale=1.0">
		<title>AI-chat模式</title>
		<style>
			body {
				font-family: 'Segoe UI', Arial, sans-serif;
				background: #f0f2f5;
				margin: 0;
				min-height: 100vh;
				/* 改为min-height避免内容溢出 */
				display: flex;
				justify-content: center;
				align-items: center;
			}

			.container {
				width: 95vw;
				/* 增加宽度占比 */
				height: 95vh;
				display: flex;
				flex-direction: column;
				gap: 10px;
				/* 缩小间隙 */
				padding: 5px;
				/* 添加内边距 */
			}

			#output {
				flex: 1;
				width: calc(100% - 10px);
				/* 考虑内边距 */
				min-height: 50%;
				padding: 12px;
				font-size: 16px;
				/* 增大字体 */
				border: 2px solid #e3e8ee;
				border-radius: 6px;
				background: white;
				resize: none;
				overflow-y: auto;
				/* 确保滚动条可用 */
			}

			.input-group {
				display: flex;
				flex-direction: column;
				/* 改为垂直布局 */
				gap: 8px;
				height: auto;
				/* 自动高度 */
			}

			#input {
				width: calc(100% - 10px);
				min-height: 80px;
				/* 更适合移动端的高度 */
				padding: 10px;
				font-size: 16px;
				border: 2px solid #e3e8ee;
				border-radius: 6px;
				resize: vertical;
				/* 允许垂直调整 */
			}

			button {
				padding: 12px 20px;
				background: #007bff;
				color: white;
				border: none;
				border-radius: 6px;
				font-size: 16px;
				cursor: pointer;
				transition: background 0.2s;
				touch-action: manipulation;
				/* 优化触摸响应 */
			}

			/* 新增按钮容器样式 */
			.button-row {
				display: flex;
				gap: 8px;
				width: 100%;
			}

			/* 发送按钮宽度设置 */
			button[onclick="sendMessage()"] {
				flex: 1;
				/* 占据剩余空间 */
				width: 80%;
			}

			button:active {
				background: #0056b3;
			}

			/* 新增图标按钮样式 */
			button.icon-button {
				padding: 12px;
				width: 20%;
				min-width: 60px;
				/* 防止过小 */
				/* 固定宽度 */
				background: #28a745;
				display: flex;
				justify-content: center;
				align-items: center;
			}

			/* 调整按钮组间距 */
			.button-group {
				display: flex;
				gap: 8px;
				margin-top: 8px;
			}

			.icon-button {
				position: relative;
			}

			/* 喇叭图标样式 */
			.icon-button svg {
				width: 24px;
				height: 24px;
				fill: white;
				transition: opacity 0.3s;
			}

			.icon-button .off-icon {
				position: absolute;
				opacity: 0;
			}

			/* 激活状态 */
			.icon-button.active .on-icon {
				opacity: 0;
			}

			.icon-button.active .off-icon {
				opacity: 1;
			}

			/* 颜色变化 */
			.icon-button.active {
				background: #dc3545;
			}

			/* 手机端响应式调整 */
			@media (max-width: 480px) {
				.container {
					width: 100vw;
					height: 100vh;
					padding: 5px;
				}

				#output {
					font-size: 15px;
					padding: 10px;
				}

				#input {
					font-size: 15px;
					min-height: 70px;
				}

				button {
					padding: 15px 20px;
					/* 增大点击区域 */
					font-size: 15px;
				}

				button.icon-button {
					padding: 10px;
					width: 44px;
				}

				.icon-button svg {
					width: 22px;
					height: 22px;
				}
			}
		</style>
	</head>
	<body>
		<div class="container">
			<textarea id="output" readonly placeholder="结果将显示在这里..."></textarea>
			<div class="input-group">
				<textarea id="input" rows="2" placeholder="输入命令(/clear 清空)Shift+Enter换行"></textarea>
				<div class="button-row">
					<button onclick="sendMessage()">发送</button>
					<button class="icon-button" onclick="playSound(this)">
						<svg class="on-icon" viewBox="0 0 24 24">
							<path fill="currentColor"
								d="M15 3v18l-5-4H4V7h6l5-4zm3.5 5.5c1-1 2.5-1.5 4-1.5v3c-.6 0-1.2.2-1.7.5l-2.3-2zm2.3 7.7c.8-.6 1.5-1.5 1.9-2.7h-3c-.1.5-.3 1-.7 1.4l1.8 1.3z" />
						</svg>

						<svg class="off-icon" viewBox="0 0 24 24">
							<path fill="currentColor"
								d="M15 3v18l-5-4H4V7h6l5-4zm7.1 14.7l-1.4-1.4-3.6-3.6-3.6 3.6-1.4-1.4 3.6-3.6-3.6-3.6 1.4-1.4 3.6 3.6 3.6-3.6 1.4 1.4-3.6 3.6 3.6 3.6z" />
						</svg>
					</button>
				</div>
			</div>
		</div>

		<script>
			const outputDiv = document.getElementById('output');

			let isSpeaking = false;
			let currentUtterance = null;
			let messages = [{
				role: "system",
				content: "You are a warm-hearted assistant, and you only speak Chinese."
			}];

			document.addEventListener("DOMContentLoaded", function() {
				document.addEventListener("keydown", function(event) {
					if (event.key === "Enter") {
						sendMessage();
						event.preventDefault();
					}
				});
			});

			function playSound(btn) {
				return new Promise((resolve) => { // 返回 Promise
					const content = outputDiv.value.split('AI:');
					if (!isSpeaking) {
						if (content) {
							// 创建语音实例
							currentUtterance = new SpeechSynthesisUtterance(content[content.length - 1]);
							currentUtterance.lang = 'zh-CN';

							// 语音结束回调
							currentUtterance.onend = () => {
								isSpeaking = false;
								btn.classList.toggle('active');
								resolve(); // 异步完成,通知外部
							};

							window.speechSynthesis.speak(currentUtterance);
							isSpeaking = true;
							btn.classList.toggle('active');
						} else {
							resolve(); // 无内容时直接 resolve
						}
					} else {
						window.speechSynthesis.cancel();
						isSpeaking = false;
						btn.classList.toggle('active');
						resolve(); // 异步完成,通知外部
					}
				});
			}

			// 添加 HTML 转义函数
			const sanitizeHTML = (str) => {
				const div = document.createElement('div');
				div.textContent = str.replace(/\s/g, '');
				return div.innerHTML;
			};

			function sendMessage() {
				const input = document.getElementById('input').value;
				document.getElementById('input').value = '';
				if (outputDiv.value.trim()) {
					const content = outputDiv.value.split('AI:');
					messages.push({
						role: "assistant",
						content: content[content.length - 1]
					});
					if (messages.length > 5) messages.splice(1, 2);
				}
				outputDiv.value += `\n\n您:${sanitizeHTML(input)}\n\nAI:\n`;
				outputDiv.scrollTop = outputDiv.scrollHeight;
				if (input.trim() === '/clear') {
					outputDiv.value = '';
					return;
				}

				const url = "http://192.168.0.223:8888/api/chat";
				messages.push({
					role: "user",
					content: input
				});
				const data = {
					model: "deepseek-r1:8b",
					messages: messages,
					stream: true
				};

				fetch(url, {
						method: 'POST',
						headers: {
							'Content-Type': 'application/json'
						},
						body: JSON.stringify(data),
						mode: 'cors'
					})
					.then(response => {
						if (!response.ok) throw new Error(`HTTP错误: ${response.status}`);

						const reader = response.body.getReader();
						const decoder = new TextDecoder('utf-8');
						let prevChunk = '';

						return new ReadableStream({
							start(controller) {
								function pushChunk() {
									reader.read().then(({
										done,
										value
									}) => {
										if (done) {
											controller.close();
											return;
										}

										const chunk = decoder.decode(value, {
											stream: true
										});
										const combined = prevChunk + chunk;
										const split = combined.split('\n');
										prevChunk = split.pop() || '';

										split.forEach(line => {
											try {
												const parsed = JSON.parse(line);
												const text = parsed.message.content;
												outputDiv.value += text; // 将结果追加到文本框
												// 滚动到底部
												outputDiv.scrollTop = outputDiv.scrollHeight;
											} catch (e) {
												console.error('解析错误:', e);
											}
										});

										controller.enqueue(value);
										pushChunk();
									});
								}
								pushChunk();
							}
						});
					})
					.then(() => console.log('流式处理完成'))
					.catch(error => {
						outputDiv.value += `错误:${error.message}\n`; // 错误信息也显示在文本框
					});
			}
		</script>
	</body>
</html>

Python调用Ollama API实现本地大模型工程化落地 本地大模型部署的核心在于将Ollama从命令行玩具升级为可集成、可监控、可扩展的HTTP服务组件。其底层基于标准RESTful API(如/api/chat、/api/generate、/api/embeddings),通过Python生态(requests、httpx、FastAPI)实现低门槛接入与高可靠性调度。结合token精准截断、流式响应容错、嵌入向量检索等关键技术,可支撑Excel自动摘要、工单分类、语义搜索等真实业务场景。Ollama服务本质是轻量级HTTP守护进程,Python调用的关键不是 阅读详情

相关推荐

FastAPI与ollama大模型异步流式响应实战

异步编程是现代Web开发的核心技术,通过事件循环机制实现高并发处理。Python的asyncio库提供了原生的异步支持,而FastAPI作为基于ASGI的异步Web框架,天然适合处理IO密集型任务。在实际工程中,将大模型服务如ollama与Web框架集成时,流式响应(StreamingResponse)能显著提升用户体验,避免长时间等待。本文通过FastAPI+ollama的实战案例,详解如何用httpx实现异步HTTP客户端,处理模型推理的流式输出,并解决异步编程中的常见陷阱,为AI服务集成提供可靠方案。

weixin_34128839的博客 435

使用 JavaScript、HTML 和 CSS 使用 Ollama 的 Llama 3 模型构建聊天应用程序

在这篇博文中,我们将介绍如何创建一个与 Ollama 的 Llama 3 模型交互的简单聊天应用程序。最后,您将拥有一个有效的聊天应用程序,该应用程序将用户消息发送到 AI 模型并实时显示响应。通过执行这些步骤,您已经创建了一个聊天应用程序,该应用程序将用户消息发送到 Ollama 的 Llama 3 模型并显示响应。在此设置中,您的Node.js服务器将处理传入的请求,与 Ollama 的 Llama 3 模型交互,并返回响应。首先,创建一个 HTML 文件,用于定义聊天应用程序的结构。

W楠的博客 842

笔记本本地部署Qwen3.8-27B大模型:Atomic Chat客户端实战指南

大语言模型(LLM)通过模拟人类语言模式,实现了强大的文本生成与理解能力。其核心原理基于Transformer架构,通过海量数据训练学习语言规律。本地部署LLM的技术价值在于实现数据隐私保护、降低使用成本并摆脱网络依赖,尤其适用于对数据安全敏感的开发和离线应用场景。量化技术是降低模型运行资源需求的关键,通过降低模型参数的精度来减少显存占用和计算量。结合像Atomic Chat这样的轻量级桌面客户端,可以大幅简化本地大模型的部署与管理流程,使开发者和爱好者能够在消费级硬件上便捷地运行如Qwen3.8-27B这

weixin_33804582的博客 414

HTML 之 ollama流式API客户端 -完整版

ollama流式API客户端。

liujava56的专栏 395

Ollama本地运行AI Agent:零API Key的开源智能体实践

AI Agent 是一种能自主规划、调用工具并迭代推理的智能系统,其核心依赖稳定低延迟的LLM推理服务。传统方案高度耦合云端API(如OpenAI),受限于网络、配额与数据合规风险;而本地化Agent通过Ollama等轻量级LLM运行时,在设备端提供OpenAI兼容接口,实现协议级无缝迁移。这种架构将开发重心从‘对接外部服务’转向‘设计行为逻辑’,显著提升调试可见性、响应确定性与数据主权——尤其适合隐私敏感、离线可用或需高频迭代的工程场景。本文以Llama3+Python构建可运行的本地Agent为例,详解

culh2177的博客 632

基于Qt与DeepSeek API构建桌面AI助手:从网络请求到流式响应的完整实现

在现代软件开发中,桌面应用程序集成AI能力已成为提升用户体验的重要趋势。通过HTTP API调用大语言模型,开发者可以为传统GUI应用注入智能交互功能。Qt框架凭借其跨平台特性和强大的网络模块,为这类集成提供了理想的技术基础。其信号与槽机制优雅地解决了异步网络请求与UI更新的线程安全问题,而QNetworkAccessManager则封装了高效的HTTP通信能力。这种技术组合特别适用于需要本地化数据处理、离线功能或特定工作流集成的场景。本文以DeepSeek API为例,详细讲解如何构建一个功能完整的桌面A

weixin_34210740的博客 1762

一文彻底整明白,基于 Ollama 工具的 LLM 大语言模型 Web 可视化对话机器人部署指南

在当今快速发展的人工智能时代,大语言模型(LLM)如 GPT-3、ChatGPT 和其他变体正在被广泛应用于各种领域。本文将指导您如何使用 Ollama 工具快速部署一个基于 LLM 的 Web 可视化对话机器人。我们将涵盖从安装 Ollama 到创建和部署一个可与用户交互的对话机器人所需的所有步骤。Ollama 是一个开源工具,旨在简化大型语言模型的管理和使用。它允许开发者轻松部署和运行 LLM,而无需深入了解底层复杂的架构。

小蜗牛的珍贵百宝箱 1985

OpenClaw流式超时根因与三阶解决方案

大模型API调用中的超时问题,本质是同步等待机制与流式响应(Streaming)范式的结构性冲突。现代LLM如Qwen2.5、DeepSeek-V4-Pro普遍采用SSE协议分块输出token,而传统网关若未适配事件流解析,就会在首token延迟或chunk间隔期触发llm request timed out。该问题横跨网关层、下游服务层和客户端层,涉及request_timeout、streaming_timeout、read_timeout三重阈值错配。其技术价值在于推动API网关向实时流式架构演进,支

weixin_30918633的博客 364

如何使用 Ollama 的 API 来生成聊天

Ollama 提供了一个 RESTful API,允许开发者通过 HTTP 请求与 Ollama 服务进行交互。这个 API 覆盖了所有 Ollama 的核心功能,包括模型管理、运行和监控。本篇将介绍如何调用 Ollama 的 RESTful API 来生成聊天。

JovaZou的成长之路 3625

SpringAI Alibaba&RAG&Milvus(二):Ollama 本地部署 Qwen3 + SpringAI Alibaba 快速入门

上一篇介绍了阿里云百炼云端模型和 OpenAI 接口规范。使用 Ollama 在本地部署 Qwen3 大模型在 Spring Boot 中集成 SpringAI Alibaba同时配置云端(DashScope)和本地(Ollama)双模型编写同步对话与流式对话接口Ollama 是一个用于在本地运行、管理和发布大模型的开源框架。它让下载和运行 Qwen 等模型变得像docker run一样简单。深度集成阿里云百炼(DashScope)支持 OpenAI 兼容接口。

weixin_46228563的博客 260

深入解析SVPWM七段式与五段式调制的电压波形差异及优化策略

本文深入解析了SVPWM七段式与五段式调制在相电压和线电压波形上的核心差异。七段式波形对称、谐波含量低,适合追求静音与性能的场景;五段式开关次数少、损耗低,适用于对效率与散热要求高的应用。文章提供了基于谐波与损耗权衡的优化策略与选型指南。

weixin_29216957的博客 440

从 HTTP 到 Ollama API

HTTP,全称为超文本传输协议(HyperText Transfer Protocol),是互联网上应用最为广泛的一种网络协议。它是客户端和服务器之间进行通信的规则集合,允许将超文本标记语言(HTML)文档从Web服务器传输到Web浏览器。简而言之,HTTP是Web浏览器和Web服务器之间的“语言”,使得用户能够浏览网页、下载文件、提交表单等。比如:- 你发一个''请求''(比如“请帮我生成一段文字”)。- 服务器返回一个 **响应**(模型生成的文字)。

2501_94085327的博客 573

PCIe 物理层(Physical Layer)详解

PCIe物理层关键技术解析 PCIe物理层作为协议栈底层核心,承担着比特流传输、链路训练与电气特性管理等关键功能。该层采用分层架构,包含逻辑物理层(负责编解码/加扰)和电气物理层(处理信号收发)。关键技术亮点包括: 智能链路管理:通过LTSSM状态机实现11种状态转换,涵盖链路检测(Detect)、协商(Polling/Configuration)、功耗管理(L0s/L1)等全生命周期控制 高效编码方案:Gen1/Gen2采用8b/10b编码(20%开销),Gen3+升级为128b/130b(仅1.5%开销

珂珂可爱多 729

Spring AI Alibaba 入门开发1-环境搭建、ollama部署、Chat和ChatModel、流式输出

环境配置:基于JDK21+SpringBoot3.5.5+SpringAI1.0.0搭建项目框架,配置API密钥与环境变量。 核心调用:支持ChatModel直接调用(call/stream方法)或ChatClient高级封装(集成提示模板、输出解析)。多模型并发:可同时配置qwen与deepseek模型,实现流式输出响应。本地部署:通过Ollama工具本地运行qwen3:4b等轻量模型,降低云端依赖。全文提供完整代码示例,涵盖API配置、中文编码处理等关键细节,助力快速开发AI应用。

geminigoth的博客 397

sdc时钟约束2——多驱动时钟

sdc 多驱动时钟 master_clock

qq_40411444的博客 5529

Linux DRM驱动实战:手把手教你用drmModeSetCrtc显示纯色画面(附完整代码)

本文提供了一份完整的Linux DRM驱动实战指南,手把手教你使用drmModeSetCrtc在屏幕上显示纯色画面。文章详细解析了从打开设备、获取资源、创建帧缓冲区到最终提交画面的完整调用流程,并附带了可直接编译运行的完整代码示例,帮助开发者快速上手Linux图形底层开发。

weixin_29216353的博客 513

QwQ-32B在ollama中支持流式输出吗?SSE实现与前端实时渲染教程

本文介绍了如何在星图GPU平台上自动化部署【ollama】QwQ-32B镜像,实现大语言模型的流式推理与前端实时渲染。通过SSE协议支持,用户可直观查看AI逐字生成的思考过程,典型应用于智能对话助手、教学问答系统等需低延迟响应的交互场景。

weixin_42590539的博客 433

VMware Workstation Pro 17 高效安装与激活指南

本文详细介绍了VMware Workstation Pro 17的高效安装与激活方法,包括系统要求、安装步骤、常见问题解决方案及性能优化技巧。通过专业的指导,帮助用户快速掌握这款强大的虚拟机软件,提升工作效率。

weixin_29322855的博客 402

从零部署本地LLM服务:Ollama集成与API调用实战指南

大型语言模型(LLM)作为当前人工智能领域的核心技术,通过海量数据预训练获得强大的自然语言理解和生成能力。其工作原理基于Transformer架构,通过自注意力机制处理序列数据,在代码生成、文档撰写和智能问答等场景展现巨大价值。在企业级应用中,数据安全与隐私保护成为关键考量,本地化部署成为重要解决方案。通过开源推理框架如Ollama,开发者可以在可控环境中部署LLM服务,实现数据不出域的安全保障。本文以Ollama为例,详细演示如何从环境准备、模型拉取到API集成的完整流程,帮助开发者快速构建私有化LLM应

weixin_34056162的博客 332

标签传播算法LPA:半监督学习解决标注数据不足的完整实战指南

在机器学习实际工程中,标注数据稀缺往往是制约模型性能的核心瓶颈。半监督学习提供了一条利用海量未标注数据来增强模型泛化能力的有效路径,其中标签传播算法(Label Propagation Algorithm, LPA)因其直观的图结构和优雅的数学原理而备受关注。LPA通过将样本映射为图中的节点,以相似度作为边权重,让已知标签沿着图结构不断扩散,从而实现对未知样本的预测。其背后基于聚类假设与流形假设,能在低标注率场景下显著缓解过拟合问题,提升分类准确率。该技术在文本分类、金融风控、图像识别等存在大量无标注数据的

weixin_29056781的博客 241

RK3506开发板实战:5分钟搞定开源鸿蒙OpenHarmony5.1+星闪功能配置

本文提供了一份基于RK3506开发板快速配置开源鸿蒙OpenHarmony 5.1并启用星闪功能的实战指南。文章详细介绍了从开发环境搭建、系统镜像编译烧录,到星闪驱动加载验证、应用开发及性能调优的全流程,帮助开发者高效上手,将新一代短距无线通信技术应用于物联网项目。

time3的博客 657

终极指南:如何快速配置Chatbox多模型AI桌面客户端实现高效对话

Chatbox是一款强大的开源AI桌面客户端,让你在一个界面中就能同时使用ChatGPT、Claude、Google Gemini、Ollama等多种主流AI模型,彻底告别多平台切换的烦恼。无论你是开发者、内容创作者还是普通用户,这款跨平台应用都能大幅提升你的AI对话效率,实现真正的多模型协同工作。 ## 为什么你需要Chatbox多模型AI客户端? 在AI应用日益普及的今天,你是否遇到过这些

gitblog_00107的博客 1072

uniapp - 获取设备麦克风权限+麦克风设备列表,用户可选择切换麦克风设备功能,选择麦克风采集设备后点击录制音频外部声音+可随时暂停/继续录音+记录音频录制时长(支持在线播放试听或下载MP3文件)

uniapp获取麦克风设备列表,uniapp录制声音,Uniapp获取麦克风权限,uniapp苹果ios安卓app获取麦克风设备列表,Uniapp H5获取浏览器麦克风并实现录音,Uniapp实现麦克风权限管理与音频录制全流程,uni-app实战案例:实现H5页面麦克风权限获取与录音功能,uni-app音频录制,uniapp麦克风授权窗口,uniapp获取iOS麦克风权限,实现前端录音并播放,把音频传给后端接口处理,获取麦克风并实现录音功能,前端获取/切换麦克风播放采集音频和采集音量大小,前端调用麦克风实现

🏆 前端领域优质创作者 2984

Ollama+Llama2中文本地部署实战指南

大模型本地化部署是AI工程落地的关键环节,其核心在于运行时环境与基座模型的协同优化。Ollama作为轻量级本地推理运行时,通过抽象CUDA/Metal适配、GGUF量化加载、KV Cache管理及标准API网关,显著降低GPU依赖与系统配置复杂度;Llama 2则凭借明确的商业授权、成熟的GGUF生态及丰富的中文微调模型(如llama2-chinese),成为当前最务实的开源基座选择。技术价值体现在‘开箱即用’的稳定性与跨硬件兼容性,广泛应用于客服知识库问答、合同条款解析、边缘设备日志分析等低延迟、高合规要

aocaiti5781的博客 353

深度学习工具包 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")

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Gemma本地编程助手:Ollama+Gradio离线部署实战

大语言模型本地化部署是当前开发者关注的核心技术趋势,尤其在代码理解、隐私保护与低延迟交互等工程场景中价值凸显。其原理在于通过轻量级模型(如Gemma 2B)结合高效推理运行时(Ollama)与快速前端封装(Gradio),实现无需联网、不传代码、可审计可控的AI辅助开发。技术价值体现在资源占用低(1.8GB模型)、中文代码理解准确率高(89.2%)、响应实时性强(流式token输出),适用于Python学习反馈、现场运维调试及金融/政企等强合规环境下的代码分析。本文聚焦Gemma本地推理与Gradio界面封

chunqingtai2922的博客 654

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

上一篇: HTML 之 ollama流式API客户端 -generate模式
下一篇: HTML 之 ollama流式API客户端 -完整版
小6哥
博客等级 码龄18年 16粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值