Я использовал CuDNNGRU для реализации GRU, и код показан ниже. И это дало мне эту ошибку, как показано ниже. Я искал в Интернете и нашел, что кто-то столкнулся с подобными проблемами, но я не нашел никаких решений. Я не уверен, если это ошибка или проблема реализации. Тем не менее, тот же код прекрасно работает с CuDNNLSTM. Я просто не могу понять, где проблема.
def build_model_GRU(timesteps, features, units, dropout_rate, learning_rate):
inputs1 = Input(shape=(timesteps, features[0]))
lstm1 = CuDNNGRU(units, stateful=False, return_sequences=True)(inputs1)
drop_layer1 = Dropout(dropout_rate)(lstm1)
dense_1 = Dense(units, activation='relu')(drop_layer1)
average_pooling1 = GlobalAveragePooling1D()(dense_1)
inputs2 = Input(shape=(timesteps, features[1]))
lstm2 = CuDNNGRU(units, stateful=False, return_sequences=True)(inputs2)
drop_layer2 = Dropout(dropout_rate)(lstm2)
dense_2 = Dense(units, activation='relu')(drop_layer2)
average_pooling2 = GlobalAveragePooling1D()(dense_2)
inputs3 = Input(shape=(timesteps, features[2]))
lstm3 = CuDNNGRU(units, stateful=False, return_sequences=True)(inputs3)
drop_layer3 = Dropout(dropout_rate)(lstm3)
dense_3 = Dense(units, activation='relu')(drop_layer3)
average_pooling3 = GlobalAveragePooling1D()(dense_3)
merged = concatenate([average_pooling1, average_pooling2, average_pooling3])
dense_all = Dense(10, activation='relu')(merged)
output = Dense(2, activation='sigmoid')(dense_all)
model = Model(inputs=[inputs1, inputs2, inputs3], outputs=output)
opt = keras.optimizers.Adam(learning_rate, decay=1e-5)
model.compile(loss=[focal_loss(alpha=0.25, gamma=2)], optimizer=opt,
metrics=['acc'])
return model
n_timesteps=100
n_features=np.array([10,40,80])
n_units=32
dropout_rate=0.5
learning_rate=0.00001
model = build_model_GRU(timesteps=n_timesteps, features=n_features, units=n_units, dropout_rate=dropout_rate, learning_rate=learning_rate)
Трассировка (последний последний вызов): Файл "C: \ Users \ zz \ Anaconda3 \ lib \ site-packages \ IPython \ core \ interactiveshell.py", строка 3267 , в файле run_code exe c (code_obj, self.user_global_ns, self.user_ns) "", строка 1, в файле запуска (файл E: /projects/all_process_longleaf_GRU.py ', wdir =' E: / projects ') " C: \ Program Files \ JetBrains \ PyCharm 2019.2.1 \ plugins \ python \ helpers \ pydev_pydev_bundle \ pydev_umd.py ", строка 197, в исполняемом файле pydev_imports.execfile (имя файла, global_vars, local_vars) # выполнить файл сценария" C: \ Program Files \ JetBrains \ PyCharm 2019.2.1 \ plugins \ python \ helpers \ pydev_pydev_imps_pydev_execfile.py ", строка 18, в execfile exe c (компилировать (содержимое +" \ n ", файл, 'exe c '), glob, lo c) Файл "E: /projects/all_process_longleaf_GRU.py", строка 409, в main () Файл "E: /projects/all_process_longleaf_GRU.py", строка 346, в главной train_model (new_train_data, y_train, new_vali_data, y_vali, result_path_1st, hidden_nodes [j]) Файл "E: / projects / all_process_longleaf _GRU.py ", строка 206, в train_model dropout_rate = dropout_rate, learning_rate = learning_rate) Файл" E: /projects/all_process_longleaf_GRU.py ", строка 143, в build_model_GRU lstm1 = CuDNNGRU (единицы измерения, состояние = ложь, возвращение_последовательности) input1) Файл "C: \ Users \ zz \ Anaconda3 \ lib \ site-packages \ keras \ Layers \ recurrent.py", строка 541, в вызов , возврат super (RNN, self). call (входные данные, ** kwargs) Файл "C: \ Users \ zz \ Anaconda3 \ lib \ site-packages \ keras \ engine \ base_layer.py", строка 489, в call output = self.call (входные данные, ** kwargs) Файл "C: \ Users \ zz \ Anaconda3 \ lib \ site-packages \ keras \ layer \ cudnn_recurrent.py", строка 81, в вызове, если len ( initial_state)! = len (self.states): Файл "C: \ Users \ zz \ Anaconda3 \ lib \ site-packages \ keras \ Layers \ recurrent.py", строка 438, в состояниях num_states = len (self. cell.state_size) TypeError: объект типа 'numpy .int32' не имеет len ()