Tôi đang cố gắng để xác định RNNCell của riêng tôi (Echo State Network) trong Tensorflow, theo định nghĩa dưới đây.Làm cách nào để triển khai RNN tùy chỉnh (cụ thể là ESN) trong Tensorflow?
x (t + 1) = tanh (Win * u (t) + W * x (t) + WFB * y (t))
y (t) = Wout * z (t)
z (t) = [x (t), u (t)]
x là trạng thái, u là đầu vào, y là đầu ra. Win, W và Wfb không thể huấn luyện được. Tất cả các trọng số được khởi tạo một cách ngẫu nhiên, nhưng W được sửa đổi như sau:. "Thiết lập một tỷ lệ nhất định các yếu tố của W 0, quy mô W để giữ bán kính quang phổ của nó dưới 1,0
tôi có mã này để tạo ra các phương trình
x = tf.Variable(tf.reshape(tf.zeros([N]), [-1, N]), trainable=False, name="state_vector")
W = tf.Variable(tf.random_normal([N, N], 0.0, 0.05), trainable=False)
# TODO: setup W according to the ESN paper
W_x = tf.matmul(x, W)
u = tf.placeholder("float", [None, K], name="input_vector")
W_in = tf.Variable(tf.random_normal([K, N], 0.0, 0.05), trainable=False)
W_in_u = tf.matmul(u, W_in)
z = tf.concat(1, [x, u])
W_out = tf.Variable(tf.random_normal([K + N, L], 0.0, 0.05))
y = tf.matmul(z, W_out)
W_fb = tf.Variable(tf.random_normal([L, N], 0.0, 0.05), trainable=False)
W_fb_y = tf.matmul(y, W_fb)
x_next = tf.tanh(W_in_u + W_x + W_fb_y)
y_ = tf.placeholder("float", [None, L], name="train_output")
vấn đề của tôi là hai lần. lần đầu tiên tôi không biết làm thế nào để thực hiện điều này như một lớp cha của RNNCell. thứ hai tôi không biết làm thế nào để tạo ra một W tensor theo đặc điểm kỹ thuật trên.
Bất kỳ sự giúp đỡ về bất kỳ câu hỏi nào được đánh giá cao, có lẽ tôi có thể tìm ra cách để chuẩn bị W, nhưng tôi chắc chắn là địa ngục không hiểu cách thực hiện của riêng tôi RNN là một siêu lớp của RNNCell.