Мне нужно установить начальные состояния моих блоков RNN с помощью keras, чтобы изучить реакцию сети (предварительное обучение) на разные начальные значения, но меня смущает синтаксис методов. Это моя модель:
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
Но я получаю пустой список.
Я также пытаюсь использовать синтаксис функциональной модели, но я не уверен, что я делаю правильно.
Я также пробую с состояниями сброса, но не позволяет выставить аргумент функции, и это функция модели, а не функция слоя.
Примеры, которые я нашел, являются более сложными, потому что они являются кодировщиками.