Dom事件的srcTarget,strElement探幽

//作者: laruence<xinchen.hui at alibab-inc.com>
//http://blog.csdn.net/laruence/
//转载请注明出处 
  
     我们知道在Javascript中,可以使用事件处理函数来监听事件,在事件处理函数中,我们可以通过当前的事件对象(IE: window.event ; firefox parameter event)来获取到事件发生的对象。
    比如,在IE中
     
 function eventHandler = function(e){
     var ev = e || window.event ; //window.event for IE, para e for ff
     var el = evt.srcTarget || evt.srcElement; // compatible with IE
     //then el is the target which cause the event
}
              
    那么,JS内部是如何通过event获取到srcTarget呢? 一直以来,我以为srcTarget会保留一个到事件发生对象的引用,但今天遇到的一个问题,让我改变了看法:
    一个Div,上面有个blur时间,当失去焦点的时候就会display=none, Div中包含几个<a>标签,在这些标签上监听了click事件。

    问题出现了,因为当你click一个A的时候,blur时间被触发了,那么这个DIV就display none了,紧接着click事件被触发,问题就是,这个时候,在click函数中,取不到正确的srcTarget了。
  
     经过一番折腾,最后使用了个比较hacker的方法来解决,就是在blur事件函数中,这样:
     
   setTimeout(function(){div.style.display='none';}, 100);
    
     回头来想,我猜测,Javascript中的srcElement的获取机制如下:
     事件发生时,event对象记录事件的鼠标坐标,但并不记录发生事件对象的引用,只有当你去获取srcTarget的时候,JS解释器,会根据event的鼠标坐标去获取该坐标的元素。


     当然,这只是个简单猜想,还没有去仔细验证,唉,不开源的东西搞起来就是麻烦,还要猜啊猜的。

     如果谁知道具体机理,欢迎来信指教。   
### LSTM 的核心概念及其工作原理 #### 1. 长短期记忆网络 (Long Short-Term Memory, LSTM) LSTM 是一种特殊的循环神经网络(Recurrent Neural Network, RNN),其设计目的是解决传统 RNN 中存在的长期依赖问题。它通过引入三个主要的门控机制——遗忘门、输入门输出门,实现了对信息的选择性保留与更新。 #### 2. 细胞状态的作用 细胞状态 \( C_t \) 被认为是 LSTM 的核心组件之一[^2]。它是贯穿时间序列的一条信息流,能够有效地保存长时间跨度内的重要数据特征。具体来说: - **遗忘门** (\( F_t \)) 控制哪些先前的信息应该被丢弃或保持不变。该操作由 sigmoid 函数完成,返回值介于 0 1 之间,其中接近 0 表示完全忽略,而接近 1 则表示完全保留。 - **输入门** 包括两部分:\( g_t \),即候选值向量;以及 \( i_t \),决定当前时刻的新信息有多少会被加入到细胞状态中。这两者共同决定了如何更新细胞状态中的内容。 - **输出门** (\( o_t \)) 决定最终从细胞状态输出的内容。这一步同样涉及一个 sigmoid 层来过滤掉不必要输出的部分,并将其结果与经过 tanh 激活后的细胞状态相乘得到实际输出。 这些复杂的交互关系使得 LSTM 可以灵活处理各种长度的时间序列数据并提取有意义模式的能力显著增强。 #### 3. 数学表达式解析 以下是标准 LSTM 单元的主要方程组描述: \[ f_t = \sigma(W_f \cdot [h_{t-1}, x_t] + b_f) \] \[ i_t = \sigma(W_i \cdot [h_{t-1}, x_t] + b_i) \] \[ g_t = \text{tanh}(W_g \cdot [h_{t-1}, x_t] + b_g) \] \[ o_t = \sigma(W_o \cdot [h_{t-1}, x_t] + b_o) \] \[ C_t = f_t * C_{t-1} + i_t * g_t \] \[ h_t = o_t * \text{tanh}(C_t) \] 上述公式展示了每个时间步长内不同组成部分之间的动态变化规律。值得注意的是,“*”号在这里代表逐元素乘法运算而非矩阵乘积。 #### 4. 实际应用场景举例 由于具备强大的建模能力,LSTMs广泛应用于自然语言处理(NLP),语音识别,sentiment analysis等领域。例如,在机器翻译任务里,编码器利用双向 LSTMs 对源句子进行语义表征构建;解码端则采用单方向结构逐步生成目标语言表述[^1]。 ```python import tensorflow as tf from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense, LSTM model = Sequential() model.add(LSTM(50, activation='relu', input_shape=(n_steps, n_features))) model.add(Dense(1)) model.compile(optimizer='adam', loss='mse') ``` 以上代码片段展示了一个简单的基于 Keras 构造的回归预测模型框架,其中包含了单一层 LSTM 结构用于捕捉时间维度上的潜在关联特性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值