稳扎稳打Silverlight(26) - 2.0线程之Lock, Interlocked, EventWaitHandle, Monitor, ThreadStaticAttribute

从零构建智能ai语音助手:ESP32s3+Python+大语言模型实战指南 本文详细介绍了基于ESP32S3硬件和Python后端的智能语音助手系统开发指南。系统采用ESP32S3采集语音,通过WebSocket实时传输到Python后端处理,利用大语言模型实现自然语言理解和意图识别,再通过TTS合成语音返回。文章从系统架构、工作流程、技术实现(包括OPUS编码、WebSocket通信、ESP32音频处理)等方面进行了详细讲解,并提供了分阶段学习路线和常见问题解决方案。该项目展示了物联网技术与AI技术的融合应用,相比传统语音系统具有更高的灵活性和智能性,为开发者提供了完整的实现方案 阅读详情
[索引页]
[源码下载]


稳扎稳打Silverlight(26) - 2.0线程之Lock, Interlocked, EventWaitHandle, Monitor, ThreadStaticAttribute


作者: webabcd


介绍
Silverlight 2.0 使用Lock, Interlocked, EventWaitHandle, Monitor来实现线程同步
    Lock - 确保代码块完成运行,而不会被其他线程中断
    Interlocked - 为多个线程共享的变量提供原子级的操作
    EventWaitHandle - 通知其他线程是否可入的类
    Monitor - 提供同步访问对象的机制
    ThreadStaticAttribute - 所指定的静态变量对每个线程都是唯一的


在线DEMO
http://www.cnblogs.com/webabcd/archive/2008/10/09/1307486.html


示例
1、Lock.xaml
< UserControl  x:Class ="Silverlight20.Thread.Lock"
    xmlns
="http://schemas.microsoft.com/winfx/2006/xaml/presentation"  
    xmlns:x
="http://schemas.microsoft.com/winfx/2006/xaml" >
    
< StackPanel  HorizontalAlignment ="Left"  Margin ="5" >

        
< TextBlock  x:Name ="txtMsg"   />

    
</ StackPanel >
</ UserControl >

Lock.xaml.cs
using  System;
using  System.Collections.Generic;
using  System.Linq;
using  System.Net;
using  System.Windows;
using  System.Windows.Controls;
using  System.Windows.Documents;
using  System.Windows.Input;
using  System.Windows.Media;
using  System.Windows.Media.Animation;
using  System.Windows.Shapes;

namespace  Silverlight20.Thread
{
    
public partial class Lock : UserControl
    
{
        
// 需要被 lock 的静态变量
        private static readonly object objLock = new object();

        
private static int i;

        
public Lock()
        
{
            InitializeComponent();

            i 
= 0;

            
for (int x = 0; x < 100; x++)
            
{
                
// 开 100 个线程去操作静态变量 i
                System.Threading.Thread thread = new System.Threading.Thread(new System.Threading.ThreadStart(DoWork));
                thread.Start();
            }


            System.Threading.Thread.Sleep(
3000);
            
// 3 秒后 100 个线程都应该执行完毕了,取得 i 的结果
            
// 做了并发处理的结果为 100 ,去掉 lock 可得到不做并发处理的结果
            txtMsg.Text = i.ToString();
        }


        
private void DoWork()
        
{
            
try
            
{
                
// lock() - 确保代码块完成运行,而不会被其他线程中断。其参数必须为一个引用类型的对象
                lock (objLock)
                
{
                    
int j = i + 1;

                    
// 模拟多线程并发操作静态变量 i 的情况
                    System.Threading.Thread.Sleep(10);

                    i 
= j;
                }

            }

            
finally
            
{
                
// code
            }

        }

    }

}



2、Interlocked.xaml
< UserControl  x:Class ="Silverlight20.Thread.Interlocked"
    xmlns
="http://schemas.microsoft.com/winfx/2006/xaml/presentation"  
    xmlns:x
="http://schemas.microsoft.com/winfx/2006/xaml" >
    
< StackPanel  HorizontalAlignment ="Left"  Margin ="5" >

        
< TextBlock  x:Name ="txtMsg"   />

    
</ StackPanel >
</ UserControl >

Interlocked.xaml.cs
using  System;
using  System.Collections.Generic;
using  System.Linq;
using  System.Net;
using  System.Windows;
using  System.Windows.Controls;
using  System.Windows.Documents;
using  System.Windows.Input;
using  System.Windows.Media;
using  System.Windows.Media.Animation;
using  System.Windows.Shapes;

namespace  Silverlight20.Thread
{
    
public partial class Interlocked : UserControl
    
{
        
private static int i;

        
public Interlocked()
        
{
            InitializeComponent();

            i 
= 0;

            
for (int x = 0; x < 100; x++)
            
{
                
// 开 100 个线程去操作静态变量 i
                System.Threading.Thread thread = new System.Threading.Thread(new System.Threading.ThreadStart(DoWork));
                thread.Start();
            }


            System.Threading.Thread.Sleep(
1000);
            
// 1 秒后 100 个线程都应该执行完毕了,取得 i 的结果
            txtMsg.Text = i.ToString();
        }


        
private void DoWork()
        
{
            
try
            
{
                
// Interlocked - 为多个线程共享的变量提供原子级的操作(避免并发问题)

                
// i 加 1
                System.Threading.Interlocked.Increment(ref i);

                
// i 减 1
                System.Threading.Interlocked.Decrement(ref i);

                
// i 加 1
                System.Threading.Interlocked.Add(ref i, 1);

                
// 如果 i 等于 100 ,则将 i 赋值为 101
                System.Threading.Interlocked.CompareExchange(ref i, 101, 100); 

                
// 将 i 赋值为 1000
                
// System.Threading.Interlocked.Exchange(ref i, 1000);
            }

            
finally
            
{
                
// code
            }

        }

    }

}



3、EventWaitHandle.xaml
< UserControl  x:Class ="Silverlight20.Thread.EventWaitHandle"
    xmlns
="http://schemas.microsoft.com/winfx/2006/xaml/presentation"  
    xmlns:x
="http://schemas.microsoft.com/winfx/2006/xaml" >
    
< StackPanel  HorizontalAlignment ="Left"  Margin ="5" >

        
< TextBlock  x:Name ="txtAutoResetEvent"   />
        
        
< TextBlock  x:Name ="txtManualResetEvent"   />

    
</ StackPanel >
</ UserControl >

EventWaitHandle.xaml.cs
using  System;
using  System.Collections.Generic;
using  System.Linq;
using  System.Net;
using  System.Windows;
using  System.Windows.Controls;
using  System.Windows.Documents;
using  System.Windows.Input;
using  System.Windows.Media;
using  System.Windows.Media.Animation;
using  System.Windows.Shapes;

namespace  Silverlight20.Thread
{
    
public partial class EventWaitHandle : UserControl
    
{
        
// AutoResetEvent(bool state) - 通知其他线程是否可入的类,自动 Reset()
        
//     bool state - 是否为终止状态,即是否禁止其他线程入内
        private System.Threading.AutoResetEvent autoResetEvent = 
            
new System.Threading.AutoResetEvent(false);

        
// ManualResetEvent(bool state) - 通知其他线程是否可入的类,手动 Reset()
        
//     bool state - 是否为终止状态,即是否禁止其他线程入内
        private System.Threading.ManualResetEvent manualResetEvent = 
            
new System.Threading.ManualResetEvent(false);

        
private static int i;

        
public EventWaitHandle()
        
{
            InitializeComponent();

            
// 演示 AutoResetEvent
            AutoResetEventDemo();

            
// 演示 ManualResetEvent
            ManualResetEventDemo();
        }


        
private void AutoResetEventDemo()
        
{
            i 
= 0;

            
for (int x = 0; x < 100; x++)
            
{
                
// 开 100 个线程去操作静态变量 i
                System.Threading.Thread thread =
                    
new System.Threading.Thread(new System.Threading.ThreadStart(AutoResetEventDemoCallback));
                thread.Start();

                
// 阻塞当前线程,直到 AutoResetEvent 发出 Set() 信号
                autoResetEvent.WaitOne();
            }


            System.Threading.Thread.Sleep(
1000);
            
// 1 秒后 100 个线程都应该执行完毕了,取得 i 的结果
            txtAutoResetEvent.Text = i.ToString();
        }


        
private void AutoResetEventDemoCallback()
        
{
            
try
            
{
                
int j = i + 1;

                
// 模拟多线程并发操作静态变量 i 的情况
                System.Threading.Thread.Sleep(5);

                i 
= j;
            }

            
finally
            
{
                
// 发出 Set() 信号,以释放 AutoResetEvent 所阻塞的线程
                autoResetEvent.Set();
            }

        }



        
private void ManualResetEventDemo()
        
{
            i 
= 0;

            
for (int x = 0; x < 100; x++)
            
{
                
// Reset() - 将 ManualResetEvent 变为非终止状态,即由此线程控制 ManualResetEvent,
                
//     其他线程排队,直到 ManualResetEvent 发出 Set() 信号(AutoResetEvent 在 Set() 时会自动 Reset())
                manualResetEvent.Reset();

                
// 开 100 个线程去操作静态变量 i
                System.Threading.Thread thread =
                    
new System.Threading.Thread(new System.Threading.ThreadStart(ManualResetEventDemoCallback));
                thread.Start();

                
// 阻塞当前线程,直到 ManualResetEvent 发出 Set() 信号
                manualResetEvent.WaitOne();
            }


            System.Threading.Thread.Sleep(
1000);
            
// 1 秒后 100 个线程都应该执行完毕了,取得 i 的结果
            txtManualResetEvent.Text = i.ToString();
        }


        
private void ManualResetEventDemoCallback()
        
{
            
try
            
{
                
int j = i + 1;

                
// 模拟多线程并发操作静态变量 i 的情况
                System.Threading.Thread.Sleep(5);

                i 
= j;
            }

            
finally
            
{
                
// 发出 Set() 信号,以释放 ManualResetEvent 所阻塞的线程,同时 ManualResetEvent 变为终止状态)
                manualResetEvent.Set();
            }

        }

    }

}



4、Monitor.xaml
< UserControl  x:Class ="Silverlight20.Thread.Monitor"
    xmlns
="http://schemas.microsoft.com/winfx/2006/xaml/presentation"  
    xmlns:x
="http://schemas.microsoft.com/winfx/2006/xaml" >
    
< StackPanel  HorizontalAlignment ="Left"  Margin ="5" >

        
< TextBlock  x:Name ="txtMsg"   />

    
</ StackPanel >
</ UserControl >

Monitor.xaml.cs
using  System;
using  System.Collections.Generic;
using  System.Linq;
using  System.Net;
using  System.Windows;
using  System.Windows.Controls;
using  System.Windows.Documents;
using  System.Windows.Input;
using  System.Windows.Media;
using  System.Windows.Media.Animation;
using  System.Windows.Shapes;

namespace  Silverlight20.Thread
{
    
public partial class Monitor : UserControl
    
{
        
private static readonly object objLock = new object();
        
private static int i;
        
        
public Monitor()
        
{
            InitializeComponent();

            i 
= 0;

            
for (int x = 0; x < 100; x++)
            
{
                
// 开 100 个线程去操作静态变量 i
                System.Threading.Thread thread = new System.Threading.Thread(new System.Threading.ThreadStart(DoWork));
                thread.Start();
            }


            System.Threading.Thread.Sleep(
1000);
            
// 1 秒后 100 个线程都应该执行完毕了,取得 i 的结果
            txtMsg.Text = i.ToString();
        }


        
private void DoWork()
        
{
            
try
            
{
                
// Monitor - 提供同步访问对象的机制

                
// Enter() - 在指定对象上获取排他锁
                System.Threading.Monitor.Enter(objLock);

                
int j = i + 1;

                
// 模拟多线程并发操作静态变量 i 的情况
                System.Threading.Thread.Sleep(5);

                i 
= j;

                
// Exit() - 释放指定对象上的排他锁
                System.Threading.Monitor.Exit(objLock);
            }

            
finally
            
{
                
// code
            }

        }

    }

}


5、ThreadStaticAttribute.xaml
< UserControl  x:Class ="Silverlight20.Thread.ThreadStaticAttribute"
    xmlns
="http://schemas.microsoft.com/winfx/2006/xaml/presentation"  
    xmlns:x
="http://schemas.microsoft.com/winfx/2006/xaml" >
    
< StackPanel  HorizontalAlignment ="Left"  Margin ="5" >
    
        
< TextBlock  x:Name ="txtMsg"   />
        
        
< TextBlock  x:Name ="txtMsg2"   />

    
</ StackPanel >
</ UserControl >

ThreadStaticAttribute.xaml.cs
using  System;
using  System.Collections.Generic;
using  System.Linq;
using  System.Net;
using  System.Windows;
using  System.Windows.Controls;
using  System.Windows.Documents;
using  System.Windows.Input;
using  System.Windows.Media;
using  System.Windows.Media.Animation;
using  System.Windows.Shapes;

namespace  Silverlight20.Thread
{
    
public partial class ThreadStaticAttribute : UserControl
    
{
        
// ThreadStatic - 所指定的静态变量对每个线程都是唯一的
        [System.ThreadStatic]
        
private static int value;

        
// 一般的静态变量,对每个线程都是共用的
        private static int value2;

        
public ThreadStaticAttribute()
        
{
            InitializeComponent();

            Demo();
        }


        
void Demo()
        
{
            System.Threading.Thread thread 
= new System.Threading.Thread(DoWork);
            thread.Name 
= "线程1";
            thread.Start();

            System.Threading.Thread.Sleep(
100);

            System.Threading.Thread thread2 
= new System.Threading.Thread(DoWork2);
            thread2.Name 
= "线程2";
            thread2.Start();

        }


        
void DoWork()
        
{
            
for (int i = 0; i < 10; i++)
            
{
                
// 线程1对静态变量的操作
                value++;
                value2
++;
            }


            
string s = value.ToString(); // value - 本线程独有的静态变量
            string s2 = value2.ToString(); // value2 - 所有线程共用的静态变量

            
this.Dispatcher.BeginInvoke(delegate { txtMsg.Text = s + " - " + s2; });
            
// this.Dispatcher.BeginInvoke(delegate { txtMsg.Text = value + " - " + value2; }); // 在UI线程上调用,所以value值为UI线程上的value值,即 0 
        }


        
void DoWork2()
        
{
            
for (int i = 0; i < 10; i++)
            
{
                
// 线程2对静态变量的操作
                value++;
                value2
++;
            }


            
string s = value.ToString(); // value - 本线程独有的静态变量
            string s2 = value2.ToString(); // value2 - 所有线程共用的静态变量

            
this.Dispatcher.BeginInvoke(delegate { txtMsg2.Text = s + " - " + s2; });
            
// this.Dispatcher.BeginInvoke(delegate { txtMsg2.Text = value + " - " + value2; }); // 在UI线程上调用,所以value值为UI线程上的value值,即 0 
        }

    }

}



OK
[源码下载]
知识检索中的四大评估指标:准确率、精确率、召回率与F1分数详解 摘要:NLP算法面试中,评估知识检索系统的核心指标包括准确率、精确率、召回率和F1分数。准确率衡量整体预测正确性,但在样本不均衡时可能失真;精确率关注预测正类中的真实比例(查准能力),召回率衡量真实正类被预测的比例(查全能力)。F1分数是两者的调和平均,提供综合评估。这些指标通过混淆矩阵计算,并存在制约关系:提高召回率往往降低精确率,反之亦然。应用场景包括文档检索(评估结果质量和覆盖度)和文本分类(如垃圾邮件过滤)。面试需掌握指标区别、适用场景及平衡方法(如调整阈值)。F1分数在样本不平衡时比准确率更具参考 阅读详情

相关推荐

某手sig3-ios算法 Chomper黑盒调用

本文主要是介绍Chomper的算法模拟执行,Chomper目前已经已经是能比较完整的模拟ios可执行文件执行的模拟器,在这块有非常大的优势。以前安卓端有强势的unidbg,现在iOS也有Chomper了,后续等待作者持续更新,完善Chomper。强势推荐一波-> Chomper地址: https://github.com/sledgeh4w/chomper。我这块也已经使用Chomper完成雅迪系列、某手的算法调用。后续也会有更多扩展。

成小新的博客 2156

ThreadStatic属性用法

如果一个类型包含非静态字段(实例字段),则对于该字段,该类型的每个实例均有其自身的独立存储位置;在一个实例中设置字段并不影响其他实例中该字段的值。而相反,对于静态字段,无论有多少实例,该字段只位于一个存储位置(或者,更具体地说,在每个 AppDomain 中,只位于一个存储位置)。然而,如果将 System.ThreadStaticAttribute 应用于静态字段,则该字段将变为线程静态字段,即

Henry Lu 2475

在没有信用卡的情况下怎么申请谷歌云(Google Cloud)?

这笔额度足够用来跑一台云服务器、部署小型网站,甚至可以尝试 AI、机器学习等项目。但问题来了——想要拿到这 300 美元,你必须先通过支付方式验证。默认选项就是绑定一张国际信用卡(Visa、MasterCard 之类),然而不少人没有信用卡,或者信用卡无法支持国际支付,结果就卡在注册第一步。很多人会疑惑:既然是送额度,为什么还要绑卡?原因其实很简单:谷歌需要确认你是真实用户,而不是批量注册薅羊毛;通过支付验证,后续如果你用完 300 美元额度,可以直接进行付费使用;

m0_74824483的博客 5651

ThreadStatic attribute

A static field marked with ThreadStaticAttribute is not shared between threads. Each executing thread has a separate instance of the field, and independently sets and gets values for that field. If

realduke2000的专栏 898

69页完整版智慧港口综合解决方案

智慧港口需求4港机远程操控等自动化改造需求自动化码头AGV无线通信及专用视频系统需求安全生产视频监控类需求港机RCMS及设备管理需求岸边智能理货码头三维全景应用智慧港口解决方案5自动化码头AGV/跨运车/无人集卡无线接入港机远控视觉及冗余无线通信视觉集卡防吊起系统集装箱码头岸边智能理货港机RCMS系统无线接入港机智能化管理(无线高清视频监控、一键报警、远程抄表系统)港口拖轮无线接入岸边溢油监测系统TD-LTE覆盖及业务终端接入港口生产管理系统港口可视化集群调度港口GiNMS综合网络设备智能管理全球作业效率最

zuoan1993的博客 2128

基于MUSIC算法的DOA估计Matlab仿真

特别需要指出的是:通道与阵元并不是一一对应,通道是由空间的一个、几个或所有阵元合成的,当然空间某个特定的阵元可包含在不同的通道内。空间谱估计侧重于研究空间多传感器阵列所构成的处理系统对感兴趣的空间信号的多种参数进行准确估计的能力,其主要目的是估计信号的空域参数或信源位置,这也是雷达、通信、声纳等许多领域的重要任务之一。从系统框图中可以清晰的看出,估计空间相当于是对目标空间的一个重构过程,这个重构的精度由众多因素决定,如环境的复杂性、空间阵元的互耦、通道不一致、频带不一致等。

FPGA/MATLAB学习教程/源码/项目合作开发 1747

ThreadStaticAttribute和ThreadLocal<T>使用区别总结

ThreadStaticAttribute和ThreadLocal<T>都是提供线程本地存储,ThreadLocal<T>是.net4才提供的。 ThreadStaticAttribute只能标注静态字段,而ThreadLocal<T>可以对实例字段才有效。 如果不标注ThreadStaticAttribute,则多个...

weixin_33705053的博客 727

[STC32G144K246入门第六步]DAC驱动

本文摘要介绍了STC32G144微控制器内置的12位DAC模块特性与应用。该芯片集成双通道独立DAC,需通过内部运放缓冲后从P0.7/P5.0引脚输出,支持音频处理、波形生成等应用场景。重点阐述了DAC的R-2R梯形网络工作原理、关键性能指标(12位分辨率、转换速度等)及编程配置方法,包括频率设置、寄存器操作和运放引脚配置。文中还提供了32点正弦波表示例和初始化代码,强调参考电压稳定性对输出精度的重要影响。

sinat_58149788的博客 139

ASP.NET 系列_07_编程指南(三)

  ASP.NET 数据源   数据源   github:  https://github.com/ixixii/ASP.NET_03_WebForms     一个 data sourse 控件与数据绑定的控件相互作用,并隐藏了复杂的数据的联编过程。这些是提供数据给 data bound 控件的工具,并且支持如插入,删除和更新操作的执行。 每一个 data sourse 控...

pre_eminent的JAVA学习园地 766

OmniBox2.0.X版本 一站式影视订阅与多端播放平台文档

OmniBox 是一站式影视订阅与多端播放平台:你可以用 JS 或 Python 按 OmniBox 规范自建爬虫源,在后台把多个爬虫源自由组合成订阅,然后在网页、手机、电视等全平台的客户端里使用。只要客户端支持 TVBox、猫源、UZ、Emby 等协议,即可无缝对接。同时支持电视直播源、六大平台直播间和网盘源视频在线观看,通过 Docker 一键部署。

欢迎来到鸾姝淡月博客,专为程序员和编程爱好者打造的技术博客。我们分享编程语言趋势、开发工具、编程哲学、职业发展等,助你掌握新技术,优化技能,激发编程热情。 1900

【技能】OpenClaw Skills学习及手搓一个极简skill

本文介绍了OpenClaw Skills的基础概念与使用方法。Skills是OpenClaw代理使用工具的核心载体,通过SKILL.md文件定义技能属性和执行方式。技能加载遵循"工作区>本地>内置>自定义目录"的优先级规则。用户可通过ClawHub一键安装现成技能,也可自定义开发技能:创建技能目录,编写包含YAML元数据和执行指令的SKILL.md文件,放置于工作区skills目录进行测试。文章还介绍了多代理场景下的技能共享、插件集成以及安全注意事项,包括沙箱使用和敏感

海兰 3975

ThreadStatic应用(Identity补完)

关于Identity Identity自增序列/唯一断标识 起初做这个东西,是在一个内部组件中,用于在高并发的环境下得到一个较短的“相对”不重复标识字符串;(这里说的相对是指一定的数量下不重复) 灵感自然是来自于SqlServer的自增列和@@Identity变量 困扰 但是自从做完之后就有一个问题困扰这我,就是这个Current属性,这个属性的实用性其实非常的差 因为在高并发的环...

weixin_34220623的博客 176

高比例风电电力系统储能运行及配置研究(python&Matlab实现)

目录1 概述2 案例3 Matlab实现 3.1 题目及分析3.2 Matlab代码 4 七个题全部代码(值得学习) 下面我们先以第二题为例,然后给出Matlab代码:先考虑风电装机300MW直接替代机组3的发电功率曲线,观察系统功率平衡发生的变化情况。然后在此场景下,以最小发电成本为目标函数,将负荷分配给两台火电机组1、2和风电机组,绘制机组日发电计划图。再将风电装机容量作为一个决策变量,以最小发电成本为目标函数,求取最小发电成本对应的风电装机容量,绘制机组日发电计划图。1. 风电装机300MW、直接

weixin_46039719的博客 1739

稳扎稳打Silverlight(26) - 2.0线程之Lock, Interlocked, EventWaitHandle, Monitor

[索引页][源码下载]稳扎稳打Silverlight(26) - 2.0线程之Lock, Interlocked, EventWaitHandle, Monitor, ThreadStaticAttribute 作者:webabcd介绍Silverlight 2.0使用Lock, Interlocked, EventWaitHandle, Monito...

weixin_33940102的博客 126

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

ONE仿真器ExternalMovement移动模型:外部轨迹数据导入与配置实战

在机会网络(DTN)仿真研究中,节点的移动模式直接决定接触机会与路由性能,而传统内置移动模型(如RandomWaypoint)难以复现真实场景轨迹。ExternalMovement作为ONE仿真器的核心移动模型,允许导入NS2格式的外部轨迹文件,使节点严格按预设坐标和时间移动,从而支持车载自组织网络、行人追踪等真实数据的仿真复现。该机制通过逐行解析位置事件,将时间戳、节点ID和坐标映射到仿真时钟,为科研人员提供可重复、高可信的接触时间与投递率评估手段。围绕外部移动数据的文件格式、配置方法、生成路径及常见排错

weixin_34302798的博客 429

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

上接稳扎稳打Silverlight(26) - 2.0线程之Lock, Interlocked, EventWaitHandle, Monitor

3、EventWaitHandle.xaml <UserControl x:Class="Silverlight20.Thread.EventWaitHandle" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http:/...

weixin_34357962的博客 84

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

System. ThreadStaticAttribute

今天发现了这个很酷的东西,可以用来标记静态字段。就我的理解,被标记为ThreadStaticAttribute的静态字段的语义将会变化,从一个正常的内存地址变成TLS中的一个存储位置。就当它做访问TLS的一种快捷方式。不同的ThreadStatic静态字段并不会冲突,表示TLS中独立的存储位置。 网上的一篇文章说到了在Asp.net中使用ThreadStatic的一些问题。我不太确定我的理解是否...

weixin_30832143的博客 236

ThreadStaticAttribute 类

 ThreadStaticAttribute 类指示静态字段的值对于每个线程都是唯一的。用 ThreadStaticAttribute 标记的 static 字段不在线程之间共享。每个执行线程都有单独的字段实例,并且独立地设置及获取该字段的值。如果在不同的线程中访问该字段,则该字段将包含不同的值。不要为标记为 ThreadStaticAttribute 的字段指定初始值,因为这样的初始化只会发生一...

weixin_33690963的博客 206

谈谈ThreadStatic属性用法

可能经常做多线程、线程池的童鞋早就知道这种问题,原谅我一直对线程研究不深。 这个东西好像出现有一段时间了,不过最近我才用到,做的API的服务,用来保存当前请求的上下文内容,原来用过Thread.SetData,不过原来的用户量没这么大,没发现问题。 查了一些关于ThreadStatic的说明,有一些人说好,也有人说坑的,的确有坑,下面看个例子: class Program { [...

极客神殿 2846

我(webabcd)的文章索引

[最后更新:2009.09.14] 稳扎稳打 Silverlight 系列文章 Silverlight 1.0 稳扎稳打Silverlight(1) - 1.0实例之电子表 稳扎稳打Silverlight(2) - 1.0实例之支持录音和回放的钢琴(Silverlight+ASP.NET AJAX+DLINQ) Silver

webabcd的专栏 678

# WPF ComboBox 控件详解与使用 —WPF 中的控件(7)--下拉框选项列表控件( ComboBox)

ComboBox`(下拉框选项列表)是 WPF 中最常用的选择类控件之一,它在有限空间内提供下拉选项列表,支持**单选、可编辑输入、数据绑定、自定义项外观**等核心能力,继承自 `System.Windows.Controls.Primitives.Selector`。 本文将从基础属性、核心事件、基础用法、数据绑定、自定义模板、高级定制到最佳实践,逐一带代码注解进行讲解。

yunmaowu0917的博客 152

从零搭建半导体设备上位机(五):三套 UI 库共存,HandyControl、MaterialDesign、Wu.Wpf 的样式基线

三套 UI 库共存:HandyControl、MaterialDesign、Wu.Wpf 的样式基线 这是「从零搭建半导体设备上位机」系列第5篇。一个 WPF 应用里同时装了 HandyControl、MaterialDesignThemes、Wu.Wpf 三套控件库。这篇讲它们为什么会打架、打架的具体机制是什么,以及怎么建立一套"谁也别想偷偷改我外观"的样式基线。 一个下拉框,白底白字 界面做完

samble的专栏 457

【QT入门到晋级】用开源的自定义控件开发

直接点击mainwindow.ui文件是看不到quc控件的,关键步骤是右键点击mainwindow.ui,右键菜单选择【Qt Designer】,在UI设计器中才能找到“Quc Widget”。注意:以上是前端调用自定义控件的方式,需要编译动态库等操作,相对要麻烦一些。如果有自定义控件的源码.h和.cpp文件,直接加入到现有qt项目中,以后台方式直接调用即可,以下是我分享过一个手搓的自定义控件类【QT自定义2D控件】QGraphics绘制仪表盘_qt仪表盘控件-优快云博客。

ocy的博客 175

【鸿蒙专题与实战】测试体系:单元测试、组件测试与 UI 测试

本文系统讲解鸿蒙开发中的三层测试实践:底层单元测试(用Hypium框架,优先覆盖纯函数、边界与异常)、中层ViewModel逻辑、顶层仅测3-5条关键UI路径。强调测试应“越往下写得越多”,因单元测试快且成本低,而UI测试慢易出错。通过实例说明断言拆分提升定位效率,结合覆盖率报告(hvigorwtest --coverage)发现盲区,核心是“用覆盖率找漏测,而非追求数字”。附五步落地清单:建测试文件、按优先级补用例、精简UI测试、生成报告、定位未覆盖行。下一篇将开启实战项目:从需求到上架全流程。

信息安全领域优质创作者|操作系统领域专家 164

K210+STM32+LVGL:手搓边缘AI智能安防监控网关

在传统的物联网或嵌入式毕设中,“智能安防”往往沦为“温湿度+蜂鸣器”的简单堆砌。由于单片机(如STM32)算力有限,无法在本地运行复杂的视觉AI模型,导致很多项目只能在云端处理图像,带来高延迟和隐私风险。本文将分享一个真正的边缘计算安防网关项目。我们采用“K210视觉协处理 + STM32F407主控 + LVGL高颜值UI”的分布式架构,完美解决了单芯片算力不足的痛点。项目不仅实现了明火与陌生人脸识别,还加入了多源传感器融合、5秒智能防抖、以及硬件与UI的双向闭环控制,是一套工业级标准的开源方案。

185
上一篇: 稳扎稳打Silverlight(25) - 2.0线程之Thread, Timer, BackgroundWorker, ThreadPool
下一篇: 稳扎稳打 Silverlight 2.0 系列文章索引
webabcd
博客等级 码龄17年 28粉丝 911原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值