閱讀全文
#! -*- 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...