我正在尝试在 tensorflow 中制作我自己的 RNN 单元,但它不起作用
I'm trying to make my own RNN cell in tensorflow but it doesn't work
我的代码如下
import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt
from tensorflow.python.ops.rnn_cell_impl import _zero_state_tensors
class CapRNNcell(tf.contrib.rnn.RNNCell):
def __init__(self, input_dim ):
self.input_dim = input_dim
@property
def state_size(self):
return 1
@property
def output_size(self):
return 1
def call(self, inputs, state):
W=weight_variable([self.input_dim , 1])
b=bias_variable([1])
output =state*tf.nn.sigmoid(tf.matmul(inputs,W)+b)
输出形状 = [batch_size , 1]
return输出,输出
def CapRnnModel(timeSeries_before_forgetting_gate , init_cap):
cell = CapRNNcell(input_dim=3)
cap_series, final_cap = tf.nn.dynamic_rnn(cell=cell , inputs=timeSeries_before_forgetting_gate, initial_state=init_cap)
return cap_series , final_cap
timeSeries_before_forgetting_gate :
shape = [batch_size , truncated_length , self.cell_state_dim]
init_cap : shape = [batch_size , 1]
cap_series : shape=[batch_size , turncated_length , 1]
final_cap : shape=[batch_size , 1]
x_place=tf.placeholder(tf.float32 , [1,2,3])
init_cap_place=tf.placeholder(tf.float32 , [1,1] )
y=CapRnnModel(x_place,init_cap_place)
with tf.Session() as sess:
sess.run(tf.initialize_all_variables())
a=np.random.rand(1,2,3)
b=np.random.rand(1,1)
result=sess.run(y,feed_dict={x_place:a , init_cap_place:b})
print(result)
我正在尝试制作自己的 rnn 单元并将其应用于 tf.nn.dynamic_rnn。所以我制作了自己的cell class( subclass of tf.contrib.rnn.RNNCell) 并且在上面做了一个简单的前向计算测试。但是它不起作用
报错如下
Traceback (most recent call last):
File "D:/MyDocuments/PycharmProjects/RNN_tutorial/customizedRNNcellTest.py", line 85, in <module>
y=CapRnnModel(x_place,init_cap_place)
File "D:/MyDocuments/PycharmProjects/RNN_tutorial/customizedRNNcellTest.py", line 76, in CapRnnModel
cap_series, final_cap = tf.nn.dynamic_rnn(cell=cell , inputs=timeSeries_before_forgetting_gate, initial_state=init_cap)
File "C:\Users\MINHO KIM\Anaconda3\lib\site-packages\tensorflow\python\ops\rnn.py", line 574, in dynamic_rnn
dtype=dtype)
File "C:\Users\MINHO KIM\Anaconda3\lib\site-packages\tensorflow\python\ops\rnn.py", line 737, in _dynamic_rnn_loop
swap_memory=swap_memory)
File "C:\Users\MINHO KIM\Anaconda3\lib\site-packages\tensorflow\python\ops\control_flow_ops.py", line 2770, in while_loop
result = context.BuildLoop(cond, body, loop_vars, shape_invariants)
File "C:\Users\MINHO KIM\Anaconda3\lib\site-packages\tensorflow\python\ops\control_flow_ops.py", line 2599, in BuildLoop
pred, body, original_loop_vars, loop_vars, shape_invariants)
File "C:\Users\MINHO KIM\Anaconda3\lib\site-packages\tensorflow\python\ops\control_flow_ops.py", line 2549, in _BuildLoop
body_result = body(*packed_vars_for_body)
File "C:\Users\MINHO KIM\Anaconda3\lib\site-packages\tensorflow\python\ops\rnn.py", line 722, in _time_step
(output, new_state) = call_cell()
File "C:\Users\MINHO KIM\Anaconda3\lib\site-packages\tensorflow\python\ops\rnn.py", line 708, in <lambda>
call_cell = lambda: cell(input_t, state)
File "C:\Users\MINHO KIM\Anaconda3\lib\site-packages\tensorflow\python\ops\rnn_cell_impl.py", line 180, in __call__
return super(RNNCell, self).__call__(inputs, state)
File "C:\Users\MINHO KIM\Anaconda3\lib\site-packages\tensorflow\python\layers\base.py", line 414, in __call__
self._set_scope(kwargs.pop('scope', None))
File "C:\Users\MINHO KIM\Anaconda3\lib\site-packages\tensorflow\python\layers\base.py", line 335, in _set_scope
if self._scope is None:
AttributeError: 'CapRNNcell' object has no attribute '_scope'
Process finished with exit code 1
怎么了?? :(
我想 W=weight_variable([self.input_dim , 1])
和 b=bias_variable([1])
定义了模型的权重和偏差。 call
向前传球。在您的情况下,您正试图在每次前向传递时获得一组新的参数。我将变量定义移到了构造函数中。这里可以看到运行版本(我有tensorflow 1.2.1):
import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt
from tensorflow.python.ops.rnn_cell_impl import _zero_state_tensors
class CapRNNcell(tf.contrib.rnn.RNNCell):
def __init__(self, input_dim):
self.input_dim = input_dim
self.W = tf.get_variable("W", [self.input_dim , 1], tf.float32)
self.b = tf.get_variable("b", [1])
@property
def state_size(self):
return 1
@property
def output_size(self):
return 1
def __call__(self, inputs, state):
output =state*tf.nn.sigmoid(tf.matmul(inputs, self.W)+ self.b)
return output, output
def CapRnnModel(timeSeries_before_forgetting_gate, init_cap):
cap_cell = CapRNNcell(input_dim=3)
cap_series, final_cap = tf.nn.dynamic_rnn(cell=cap_cell, inputs=timeSeries_before_forgetting_gate, initial_state=init_cap)
return cap_series , final_cap
x_place=tf.placeholder(tf.float32 , [1,2,3])
init_cap_place=tf.placeholder(tf.float32 , [1,1])
y=CapRnnModel(x_place, init_cap_place)
with tf.Session() as sess:
sess.run(tf.initialize_all_variables())
a=np.random.rand(1,2,3)
b=np.random.rand(1,1)
result=sess.run(y,feed_dict={x_place:a , init_cap_place:b})
print(result)
我的代码如下
import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt
from tensorflow.python.ops.rnn_cell_impl import _zero_state_tensors
class CapRNNcell(tf.contrib.rnn.RNNCell):
def __init__(self, input_dim ):
self.input_dim = input_dim
@property
def state_size(self):
return 1
@property
def output_size(self):
return 1
def call(self, inputs, state):
W=weight_variable([self.input_dim , 1])
b=bias_variable([1])
output =state*tf.nn.sigmoid(tf.matmul(inputs,W)+b)
输出形状 = [batch_size , 1] return输出,输出
def CapRnnModel(timeSeries_before_forgetting_gate , init_cap):
cell = CapRNNcell(input_dim=3)
cap_series, final_cap = tf.nn.dynamic_rnn(cell=cell , inputs=timeSeries_before_forgetting_gate, initial_state=init_cap)
return cap_series , final_cap
timeSeries_before_forgetting_gate :
shape = [batch_size , truncated_length , self.cell_state_dim]
init_cap : shape = [batch_size , 1]
cap_series : shape=[batch_size , turncated_length , 1]
final_cap : shape=[batch_size , 1]
x_place=tf.placeholder(tf.float32 , [1,2,3])
init_cap_place=tf.placeholder(tf.float32 , [1,1] )
y=CapRnnModel(x_place,init_cap_place)
with tf.Session() as sess:
sess.run(tf.initialize_all_variables())
a=np.random.rand(1,2,3)
b=np.random.rand(1,1)
result=sess.run(y,feed_dict={x_place:a , init_cap_place:b})
print(result)
我正在尝试制作自己的 rnn 单元并将其应用于 tf.nn.dynamic_rnn。所以我制作了自己的cell class( subclass of tf.contrib.rnn.RNNCell) 并且在上面做了一个简单的前向计算测试。但是它不起作用 报错如下
Traceback (most recent call last):
File "D:/MyDocuments/PycharmProjects/RNN_tutorial/customizedRNNcellTest.py", line 85, in <module>
y=CapRnnModel(x_place,init_cap_place)
File "D:/MyDocuments/PycharmProjects/RNN_tutorial/customizedRNNcellTest.py", line 76, in CapRnnModel
cap_series, final_cap = tf.nn.dynamic_rnn(cell=cell , inputs=timeSeries_before_forgetting_gate, initial_state=init_cap)
File "C:\Users\MINHO KIM\Anaconda3\lib\site-packages\tensorflow\python\ops\rnn.py", line 574, in dynamic_rnn
dtype=dtype)
File "C:\Users\MINHO KIM\Anaconda3\lib\site-packages\tensorflow\python\ops\rnn.py", line 737, in _dynamic_rnn_loop
swap_memory=swap_memory)
File "C:\Users\MINHO KIM\Anaconda3\lib\site-packages\tensorflow\python\ops\control_flow_ops.py", line 2770, in while_loop
result = context.BuildLoop(cond, body, loop_vars, shape_invariants)
File "C:\Users\MINHO KIM\Anaconda3\lib\site-packages\tensorflow\python\ops\control_flow_ops.py", line 2599, in BuildLoop
pred, body, original_loop_vars, loop_vars, shape_invariants)
File "C:\Users\MINHO KIM\Anaconda3\lib\site-packages\tensorflow\python\ops\control_flow_ops.py", line 2549, in _BuildLoop
body_result = body(*packed_vars_for_body)
File "C:\Users\MINHO KIM\Anaconda3\lib\site-packages\tensorflow\python\ops\rnn.py", line 722, in _time_step
(output, new_state) = call_cell()
File "C:\Users\MINHO KIM\Anaconda3\lib\site-packages\tensorflow\python\ops\rnn.py", line 708, in <lambda>
call_cell = lambda: cell(input_t, state)
File "C:\Users\MINHO KIM\Anaconda3\lib\site-packages\tensorflow\python\ops\rnn_cell_impl.py", line 180, in __call__
return super(RNNCell, self).__call__(inputs, state)
File "C:\Users\MINHO KIM\Anaconda3\lib\site-packages\tensorflow\python\layers\base.py", line 414, in __call__
self._set_scope(kwargs.pop('scope', None))
File "C:\Users\MINHO KIM\Anaconda3\lib\site-packages\tensorflow\python\layers\base.py", line 335, in _set_scope
if self._scope is None:
AttributeError: 'CapRNNcell' object has no attribute '_scope'
Process finished with exit code 1
怎么了?? :(
我想 W=weight_variable([self.input_dim , 1])
和 b=bias_variable([1])
定义了模型的权重和偏差。 call
向前传球。在您的情况下,您正试图在每次前向传递时获得一组新的参数。我将变量定义移到了构造函数中。这里可以看到运行版本(我有tensorflow 1.2.1):
import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt
from tensorflow.python.ops.rnn_cell_impl import _zero_state_tensors
class CapRNNcell(tf.contrib.rnn.RNNCell):
def __init__(self, input_dim):
self.input_dim = input_dim
self.W = tf.get_variable("W", [self.input_dim , 1], tf.float32)
self.b = tf.get_variable("b", [1])
@property
def state_size(self):
return 1
@property
def output_size(self):
return 1
def __call__(self, inputs, state):
output =state*tf.nn.sigmoid(tf.matmul(inputs, self.W)+ self.b)
return output, output
def CapRnnModel(timeSeries_before_forgetting_gate, init_cap):
cap_cell = CapRNNcell(input_dim=3)
cap_series, final_cap = tf.nn.dynamic_rnn(cell=cap_cell, inputs=timeSeries_before_forgetting_gate, initial_state=init_cap)
return cap_series , final_cap
x_place=tf.placeholder(tf.float32 , [1,2,3])
init_cap_place=tf.placeholder(tf.float32 , [1,1])
y=CapRnnModel(x_place, init_cap_place)
with tf.Session() as sess:
sess.run(tf.initialize_all_variables())
a=np.random.rand(1,2,3)
b=np.random.rand(1,1)
result=sess.run(y,feed_dict={x_place:a , init_cap_place:b})
print(result)