tensorflow - “ValueError:没有为任何变量提供渐变”
问题描述
我正在尝试优化 LSTM 模型的参数。该模型具有多个时间序列特征,我正在尝试为未来进行预测。但是,这会导致错误“ValueError:没有为任何变量提供渐变:['lstm_6/lstm_cell_6/kernel:0', 'lstm_6/lstm_cell_6/recurrent_kernel:0', 'lstm_6/lstm_cell_6/bias:0', 'lstm_7/lstm_cell_7 /kernel:0'、'lstm_7/lstm_cell_7/recurrent_kernel:0'、'lstm_7/lstm_cell_7/bias:0'、'time_distributed_3/kernel:0'、'time_distributed_3/bias:0']。不知道我做错了什么
from tensorcross.model_selection import GridSearch
n_past = 7
n_future = 7
n_features = 10
def build_model(
optimizer: tf.keras.optimizers.Optimizer,
learning_rate: float,
units: int
)-> tf.keras.models.Model:
encoder_inputs = tf.keras.layers.Input(shape=(n_past, n_features))
encoder_l1 = tf.keras.layers.LSTM(units=units, return_state=True)
encoder_outputs1 = encoder_l1(encoder_inputs)
encoder_states1 = encoder_outputs1[1:]
decoder_inputs = tf.keras.layers.RepeatVector(n_future)(encoder_outputs1[0])
decoder_l1 = tf.keras.layers.LSTM(units=units, return_sequences=True)(decoder_inputs,initial_state = encoder_states1)
decoder_outputs1 = tf.keras.layers.TimeDistributed(tf.keras.layers.Dense(n_features))(decoder_l1)
model = tf.keras.models.Model(inputs=encoder_inputs,outputs=decoder_outputs1)
opt = optimizer(learning_rate=learning_rate)
model.compile(
loss="mse", optimizer=opt, metrics=["mse"]
)
return model
param_grid = {
"optimizer": [
tf.keras.optimizers.Adam,
tf.keras.optimizers.RMSprop,
],
"units":[8,16,32,64,128,256] ,
"learning_rate": [0.001, 0.0001]
}
grid_search = GridSearch(
model_fn=build_model,
param_grid=param_grid,
verbose=1,
# num_features=1,
# num_targets=1
)
grid_search.fit(
train_dataset=(X_train,y_train),
val_dataset=(X_test,y_test),
epochs=100,
verbose=1
)
解决方案
推荐阅读
- dc.js - 如何创建具有 2 个子组的 2 行图表
- php - 使用 PDO 更新 IN
- azure - 从公共访问设置为开启的 Azure Get-AzStorageContainer 获取 Blob URL?
- java - Spring 3.5 设置 xml 属性,使用 PropertyPlaceholderConfigurer 处理默认值
- firebase - Firebase 服务器未使用 Crashlytics 上传或接收崩溃报告
- azure - 如何在 azure 容器实例中指定端口?
- javascript - 脚本添加 2 个空白行
- django - 在 Django DetailView 中添加注释
- javascript - for循环javascript中的异步/等待。
- javascript - 使用 getTime() 转换日期数组