貌離神合的RNN與ODE 花式RNN簡介

2021-08-21 04:08:02 字數 1465 閱讀 8612

閱讀全文

#! -*- coding: utf-8- -*-

from keras.layers import layer

import keras.backend as k

class my_rnn(layer):

def __init__(self, output_dim, **kwargs):

self.output_dim = output_dim # 輸出維度

super(my_rnn, self).__init__(**kwargs)

def build(self, input_shape): # 定義可訓練引數

self.kernel1 = self.add_weight(name='kernel1',

shape=(self.output_dim, self.output_dim),

initializer='glorot_normal',

trainable=true)

self.kernel2 = self.add_weight(name='kernel2',

shape=(input_shape[-1], self.output_dim),

initializer='glorot_normal',

trainable=true)

self.bias = self.add_weight(name='kernel',

shape=(self.output_dim,),

initializer='glorot_normal',

trainable=true)

def step_do(self, step_in, states): # 定義每一步的迭代

step_out = k.tanh(k.dot(states[0], self.kernel1) +

k.dot(step_in, self.kernel2) +

self.bias)

return step_out, [step_out]

def call(self, inputs): # 定義正式執行的函式

init_states = [k.zeros((k.shape(inputs)[0],

self.output_dim)

)] # 定義初始態(全零)

outputs = k.rnn(self.step_do, inputs, init_states) # 迴圈執行step_do函式

return outputs[0] # outputs是乙個tuple,outputs[0]為最後時刻的輸出,

# outputs[1]為整個輸出的時間序列,output[2]是乙個list,

# 是中間的隱藏狀態。

def compute_output_shape(self, input_shape):

return (input_shape[0], self.output_dim)

LSTM與RNN的區別

1.rnn rnn能夠處理一定的短期依賴,但無法處理長期依賴問題。因為當序列較長時,序列後部的梯度很難反向傳播到前面的序列,這就產生了梯度消失問題。當然,rnn也存在梯度 問題,但這個問題一般可以通過梯度裁剪 gradient clipping 來解決。rnn網路結構如下 ht 為timestep ...

delta3d與ode物理引擎的結合。

使用delta3d有些日子了,對物理引擎這塊沒有細看過,最近研究了一下。主要分為兩大部分,第一在dtcore中對ode的封裝,第二通過dtphysics,使用pal phys abstract layer 對三種物理引擎 bullet ode phys的封裝。這裡先介紹下dtcore中對delta3...

n與 r的區別

r 是回車,n 是換行,前者使游標到行首,後者使游標下移一格。通常用的enter是兩個加起來。回車和換行 今天,我總算搞清楚 回車 carriage return 和 換行 line feed 這兩個概念的來歷和區別了。在計算機還沒有出現之前,有一種叫做電傳打字機 teletype model 33...