微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

根据 Python 上的迭代器调用函数时如何添加代码行

如何解决根据 Python 上的迭代器调用函数时如何添加代码行

我正在尝试使用 keras.models.Sequential 测试许多机器学习模型。

我的想法是,一旦我有一个看起来像 [num_layers,num_units_per_layers] 的迭代器,例如 [(1,64),(2,(64,128))],就可以使用一种运行迭代器的 for 循环来创建脚本,以便能够创建一个 {{ 1}} 具有迭代器每一步中层数和单元数的顺序模型。

这就是我正在尝试的:

keras

但是我在自动添加新图层时卡住了。综上所述,我在迭代器的每一步中想要的是由其值表示的it = [[(1,128),128)),(3,(128,64,256))]] for layers,units in it: model = keras.Sequential([ layers.Dense(units[0]) #How to get another layers here when layers > 1. ]) 模型。 有没有办法做到这一点?

例如,当 keraslayers = 2 时,代码应如下所示:

units = (64,128)

如果 model = keras.Sequential([ layers.Dense(64),layers.Dense(128) ]) layers = 1 代码必须是:

units = 128

解决方法

第一个问题是您设置 it 的方式。你这样做的方式使它成为一个单一的列表,你想要一个包含 n 个列表的列表(这里 n 是 3)。如果您将 it 定义如下,您可以按照您正在寻找的方式提取 layers,units

it = [[1,[128]],[2,(64,128)],[3,(128,64,256)]]

如果你想要一个有一层的模型,你需要把单元的数量放在括号里,否则它不能很好地与其他架构一起工作(因为索引)。接下来,我建议对代码进行一些必要的调整。首先,我会使用不同的方式来构建一个 Sequential 模型(如下所示)。然后,您需要定义输入形状,否则模型将不知道如何构建。最后,只需为隐藏层生成器循环之外的每个模型创建一个输出层即可。

我写这个玩具问题是为了符合您对 10 个训练样本、一个输入维度和一个输出维度的模型进行迭代的想法。

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
import numpy as np

x = np.random.rand(10,1)
y = np.random.rand(10,1)

it = [[1,256)]]
for layers,units in it:
    model = Sequential()
    for i in range(layers):
        model.add(Dense(units[i],input_shape=(1,)))
    model.add(Dense(1))
    model.summary()
    model.compile(loss='mse',optimizer='Adam')
    model.fit(x,y,batch_size=1,epochs=1)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。