python - Keras - Hyper Tuning 模型的初始状态
问题描述
我编写了一个预测顺序数据的LSTM模型。
def get_model(config, num_features, output_size):
opt = Adam(learning_rate=get_deep(config, 'hp.learning_rate'), beta_1=get_deep(config, 'hp.beta_1'))
inputs = Input(shape=[None, num_features], dtype=tf.float32, ragged=True)
layers = LSTM(get_deep(config, 'hp.lstm_neurons'), activation=get_deep(config, 'hp.lstm_activation'))(
inputs.to_tensor(), mask=tf.sequence_mask(inputs.row_lengths()))
layers = BatchNormalization()(layers)
if 'dropout_rate' in config['hp']:
layers = Dropout(get_deep(config, 'hp.dropout_rate'))(layers)
for layer in get_deep(config, 'hp.dense_layers'):
layers = Dense(layer['neurons'], activation=layer['activation'])(layers)
layers = BatchNormalization()(layers)
if 'dropout_rate' in layer:
layers = Dropout(layer['dropout_rate'])(layers)
layers = Dense(output_size, activation='sigmoid')(layers)
model = Model(inputs, layers)
model.compile(loss='mse', optimizer=opt, metrics=['mse'])
model.summary()
return model
我已经使用AWS SageMaker调整了该层的一些参数。在验证模型时,我已经多次运行具有特定配置的模型。大多数时候结果是相似的,但是,一次运行比其他运行好得多,这让我认为模型的初始状态可能对于获得最佳性能至关重要。
正如本视频中所建议的,权重初始化可以提供一些性能提升。我用谷歌搜索并找到了layer weight initializers,但我不确定我应该调整什么范围。
更新: 正如一些评论/答案中所建议的,我正在使用固定种子来“锁定”模型结果:
# Set `python` built-in pseudo-random generator at a fixed value
random.seed(seed_value)
# Set `numpy` pseudo-random generator at a fixed value
np.random.seed(seed_value)
# Set `tensorflow` pseudo-random generator at a fixed value
tf.random.set_seed(seed_value)
每个新火车的结果都会重复,但是,不同的种子可以产生比其他种子更好的结果。那么我如何找到/调整最好的种子呢?
解决方案
我认为这个问题没有“一刀切”的解决方案。初始权重很大程度上取决于手头的问题类型以及我们用来解决该问题的数据。我们所能做的就是将您指向一个好的资源,您可以从中尝试查看提到的哪种方法适合您的问题。下面的文章是一个很好的资源,它不仅可以让您详细了解如何以及为什么要初始化权重,还可以指出可以帮助建立学术理解的同行评审研究。
推荐阅读
- javascript - 为什么在将数组内容记录到控制台后未定义 javascript 数组对象?
- react-native - 我的项目没有在 android 模拟器上运行,但可以在 iphone 上运行
- java - KeyListener is firering wrong Events
- python - 验证输入的第一个数字是 4
- python - 为什么 Numpy 掩码数组有用?
- javascript - javascript函数在雪花函数中给出NULL
- slurm - 如何强制用户在 slurm 中的某个目录中提交作业
- javascript - 如何在 Electron 中将 ImageData 保存为 PNG
- java - 如何使用 MenuItem 中的事件处理程序关闭窗口
- angular - 如何使用数组中的多个条件过滤对象?