gpt4 book ai didi

python - Keras 重新定义输入形状

转载 作者:太空宇宙 更新时间:2023-11-03 14:10:59 26 4
gpt4 key购买 nike

假设我想训练 GRU,并且因为我需要 stateful=true,所以必须事先知道批量大小。

使用函数式 API,我的输入如下:

input_1 = Input(batch_shape=(batch_size, None, features))

但是当我评估模型时,我不想以固定的时间步长批量传递测试数据(batch_size = 1;一次观察的预测)。我的目前的解决方案是加载保存的模型并使用以下命令重建它:

input_1 = Input(shape=(None, num_input_dim))

为此,我需要一种遍历模型每一层的方法,然后之后设置权重。

    input_1 = Input(shape=(None, num_input_dim))
x1 = input_1
weights = []
for l in range(0, len(layers)):
if isinstance(layers[l], keras.layers.GRU):
x1 = GRU(layers[l].output_shape[-1], return_sequences=True)(x1)
weights.append(layers[l].get_weights())
elif isinstance(layers[l], keras.layers.Dense):
x1 = Dense(layers[l].output_shape[-1], activation='tanh')(x1)
weights.append(layers[l].get_weights())
else:
continue

(这只是一个例子,我发现这个解决方案非常不优雅。)

必须有更好的方法来重新定义输入形状。有人可以帮我吗请。

最佳答案

由于您没有使用 stateful=True 模型进行评估,因此您确实需要重新定义模型。

您可以创建一个函数来创建模型,并将选项作为输入:

def createModel(stateful, weights=None):

#input
if (stateful==True):
batch = batch_size
else:
batch = None

#You don't need fixed timesteps, even if the model is stateful
input_1 = Input(batch_shape=(batch_size, None, num_input_dim))

#layer creation as you did with your first model
...
out = LSTM(...., stateful=stateful)(someInput)
...

model = Model(input_1,out)

if weights is not None:
model.set_weights(weights)

return model

工作顺序:

#create the training model 

trainModel = createModel(True,None)

#train
...

#create the other model
newModel = createModel(False,trainModel.get_weights())

关于python - Keras 重新定义输入形状,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48498711/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com