gpt4 book ai didi

python - 我可以使用函数式 API 在模型中使用循环吗?

转载 作者:行者123 更新时间:2023-11-30 09:41:58 25 4
gpt4 key购买 nike

我有一个训练有素的 keras 模型,它接受大小 (batchSize,2) 的输入。这运作良好并给出了良好的结果。

我的主要问题是建立一个模型,该模型接受大小为 (batchSize,2,16) 的向量输入,并将其在模型内部切片为大小为 (batchSize,2) 的 16 个向量,并将输出连接在一起。

我已经使用了这个代码

    y = layers.Input(shape=(2,16,))

model_x= load_model('saved_model')

for i in range(16):
x_input = Lambda(lambda x: x[:, :, i])(y)

if i == 0:
x_output = model_x(x_input)
else:
x_output = layers.concatenate([x_output,
model_x(x_input)])

x_output = Lambda(lambda x: x[:, :tf.cast(N, tf.int32)])(x_output)

final_model = Model(y, x_output)


虽然保存的模型为我提供了良好的性能,但此代码训练效果不佳并且未提供预期的性能。我该怎么做才能获得更好的结果?

最佳答案

我无法对您的最终模型的糟糕性能发表任何评论,因为这可能是由于各种原因造成的,并且从您的问题内容中并不容易看出这一点。但要回答您最初的问题:是的,您可以通过这种方式使用 for 循环,因为您本质上是在创建层/张量并将它们相互连接(即构建模型的图形)。所以这是一件有效的事情。问题可能出在其他地方,例如错误的索引、错误的损失函数等。

此外,您可以通过更简单的方法构建最终模型。您已经拥有一个经过训练的模型,该模型获取形状为 (batch_size, 2) 的输入并提供形状为 (batch_size, 8) 的输出。现在您想要构建一个接受形状 (batch_size, 2, 16) 输入的模型,将已训练的模型应用于 16 个 (batch_size, 2) 段中的每一个段然后连接结果。您可以使用TimeDistributed轻松做到这一点包装:

# load your already trained model
model_x = load_model('saved_model')

inp = layers.Input(shape=(2,16))
# this makes the input shape as `(16,2)`
x = layers.Permute((2,1))(inp)
# this would apply `model_x` on each of the 16 segments; the output shape would be (None, 16, 8)
x = layers.TimeDistributed(model_x)(x)
# flatten to make it have a shape of (None, 128)
out = layers.Flatten()(x)

final_model = Model(inp, out)

关于python - 我可以使用函数式 API 在模型中使用循环吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57428043/

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