tensorflow 如何在我的神经网络中初始化权重值

时间:2021-06-16 07:58:46

标签: python tensorflow keras

我发现默认情况下,keras 使用 Glorot/Xavier 来初始化权重,这意味着值将介于 +- (sqrt(6 / float(F_in + F_out)) 之间

但在我的情况下,我使用下面的架构,ishape = (None, 4):我不使用固定输入大小。 (我的输入数据是一个热编码的 DNA 序列)

model = keras.Sequential()
model.add(Conv1D(filternumber, b, activation='relu', input_shape=ishape))
model.add(MaxPooling1D(pool_size=a))
model.add(GlobalAvgPool1D(data_format="channels_last"))
model.add(Dense(32, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(1, activation='sigmoid'))

考虑到它不知道输入大小,keras 如何初始化权重?在我的情况下初始化权重的最佳方法是什么?

谢谢

1 个答案:

答案 0 :(得分:1)

在这种情况下,您的模型“知道”您的输入大小,它是 4None 中的 (None, 4) 指的是可变数量的向量,即批量大小,但输入向量大小和层数是驱动 Sequential 模型从输入到输出的形状。

您可以在此 Sequential model's developer guide 中读到,即使根本没有指定形状,模型也不会初始化任何权重,直到第一次推断输入数据将修复输入形状。该模型将根据现在已知的形状构建其权重。

任何需要了解输入和输出特征大小的权重初始值设定项都适用于这两种情况。

我对选择权重初始化技术没有太多建议,我会将权重初始化视为要调整的超参数。