我需要用keras设置RNN单元的初始状态,以研究网络响应(预训练)对不同的初始值的理解,但是我对方法的语法感到困惑。这是我的模型:
model = Sequential()
model.add(SimpleRNN(units=N_rec,return_sequences=True,input_shape=(None, 2), kernel_initializer='glorot_uniform', recurrent_initializer= pepe ,activation='tanh',use_bias=False))
model.add(Dense(units=1,input_dim=N_rec))
我的数据类型是两个通道的时间序列和固定长度。我需要使用'stateful = False'。
我正在使用顺序模型,并且试图设置图层状态,但它不起作用。我正在使用:Keras版本2.0.6
我使用了:model.layers[0].states[0] =np.ones(N_rec)
,其中N_rec是单位数。没有效果。我使用“一个”设置初始值,然后尝试使用不同的初始化。
我也尝试:K.set_value(model.layers[0].states[0],h_tm)
,其中h_tm= tf.zeros([N_rec])
出现以下错误:
AttributeError:'NoneType'对象没有属性'dtype'
我也尝试使用:
def set_states(model, states):
for (d,_), s in zip(model.state_updates, states):
K.set_value(d, s)
但是由于我不太精通编程,所以我不确定语法。 打印我使用的状态:
for layer in model.layers:
print" 1"
if getattr(layer,'stateful',False):
if hasattr(layer,'states'):
print "a c a "
for state in layer[0].states:
statesAll.append(K.get_value(state))
print"STATES",statesAll
但是我得到一个空列表。
我也尝试使用函数模型语法,但是我不确定我做得是否正确。
我也尝试使用复位状态,但是不允许在函数上加上参数,它是模型函数,而不是层函数。
我发现的示例更加复杂,因为它们是编码器。