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

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

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

这是我正在尝试的代码:

it = [[(1, 128),(2, (64,128)), (3,(128,64,256))]]for layers, units in it:    model = keras.Sequential([        layers.Dense(units[0])        #当layers > 1时,如何在这里添加其他层?    ])

但我在自动添加新层时遇到了困难。总结一下,我希望在迭代器的每一步中,keras模型能够根据其值来表示。有什么方法可以做到这一点吗?

例如,当layers = 2units = (64,128)时,代码应该如下所示:

model = keras.Sequential([    layers.Dense(64),    layers.Dense(128)])

如果layers = 1units = 128,代码必须是:

model = keras.Sequential([    layers.Dense(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 Sequentialfrom tensorflow.keras.layers import Denseimport numpy as npx = np.random.rand(10,1)y = np.random.rand(10,1)it = [[1,[128]],[2,(64,128)],[3,(128,64,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)

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注