Python 上根据迭代器调用函数时如何添加代码行
How to add code lines when calling a function depending on an iterator on Python
我正在尝试使用 keras.models.Sequential
测试许多 ML 模型。
我的想法是,一旦我有一个看起来像 [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])
#How to get another layers here when layers > 1.
])
但是我在自动添加新图层时卡住了。综上所述,迭代器的每一步我想要的是它的值所代表的keras
模型。
有什么办法吗?
例如,当 layers = 2
和 units = (64,128)
时,代码应如下所示:
model = keras.Sequential([
layers.Dense(64),
layers.Dense(128)
])
如果 layers = 1
和 units = 128
代码必须是:
model = keras.Sequential([
layers.Dense(128)
])
嗯,第一个问题是您设置的方式 it
。你这样做的方式使它成为一个列表,你想要一个 n 列表的列表(这里 n 是 3)。如果你定义it
如下,你可以提取layers, units
你正在寻找的方式。
it = [[1,[128]],[2,(64,128)],[3,(128,64,256)]]
如果你想要一个只有一层的模型,你需要把单位的数量放在括号里,否则它不能很好地与其他架构一起工作(因为索引)。接下来,我建议对代码进行一些必要的调整。首先,我会使用不同的方式来构建一个顺序模型(如下所示)。然后,您需要定义输入形状,否则模型将不知道如何构建。最后,只需在隐藏层生成器循环之外为每个模型创建一个输出层。
我写这个玩具问题是为了满足您对 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,[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)
我正在尝试使用 keras.models.Sequential
测试许多 ML 模型。
我的想法是,一旦我有一个看起来像 [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])
#How to get another layers here when layers > 1.
])
但是我在自动添加新图层时卡住了。综上所述,迭代器的每一步我想要的是它的值所代表的keras
模型。
有什么办法吗?
例如,当 layers = 2
和 units = (64,128)
时,代码应如下所示:
model = keras.Sequential([
layers.Dense(64),
layers.Dense(128)
])
如果 layers = 1
和 units = 128
代码必须是:
model = keras.Sequential([
layers.Dense(128)
])
嗯,第一个问题是您设置的方式 it
。你这样做的方式使它成为一个列表,你想要一个 n 列表的列表(这里 n 是 3)。如果你定义it
如下,你可以提取layers, units
你正在寻找的方式。
it = [[1,[128]],[2,(64,128)],[3,(128,64,256)]]
如果你想要一个只有一层的模型,你需要把单位的数量放在括号里,否则它不能很好地与其他架构一起工作(因为索引)。接下来,我建议对代码进行一些必要的调整。首先,我会使用不同的方式来构建一个顺序模型(如下所示)。然后,您需要定义输入形状,否则模型将不知道如何构建。最后,只需在隐藏层生成器循环之外为每个模型创建一个输出层。
我写这个玩具问题是为了满足您对 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,[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)