gpt4 book ai didi

python - for循环内的神经网络

转载 作者:行者123 更新时间:2023-12-01 08:52:43 27 4
gpt4 key购买 nike

我有这样的东西

for q in range(10):
# generate some samples
x = Input(batch_shape=(n_batch, xx.shape[1]))
x = Dense(20)(x)
x = LeakyReLU(alpha=0.001)(x)
y = Dense(1)(x)
y = LeakyReLU(alpha=0.001)(y)
model = Model(inputs=x, outputs=y)
model.compile(loss='mean_squared_error', optimizer='Adam', metrics=['accuracy'])
for i in range(10):
model.fit(x, y, epochs=1, batch_size=n_batch, verbose=0, shuffle=False)
model.reset_states()

我想知道神经网络是否是为每个 q 从头开始​​构建的,还是保留了前一个 q 的所有内容?如果它保留,我如何为每个 q 分别重置和构建、编译和拟合神经网络?

最佳答案

当你用keras或tensorflow创建一个层时,tensorflow会在它的图中添加一个或多个节点,每次你添加优化器、损失函数或激活函数时,它都会做同样的事情并为它们添加一个节点。

当您调用model.fit()时,tensorflow 会从其根开始执行其图。如果您在循环中添加节点,则先前的节点将不会被删除。它们会占用内存空间,并会降低您的性能。

该怎么办?非常简单,重新初始化权重并重新使用相同的节点。您的代码不会发生太大变化,只需使用 for 循环向下移动示例生成并定义一个函数来重新初始化即可。

我还降低了第二个 for 循环,只是将纪元数增加到 10,如果您有理由将其放在那里,则可以将其放回去。

def reset_weights(model):
session = K.get_session()
for layer in model.layers:
if hasattr(layer, 'kernel_initializer'):
layer.kernel.initializer.run(session=session)

x = Input(batch_shape=(n_batch, xx.shape[1]))
x = Dense(20)(x)
x = LeakyReLU(alpha=0.001)(x)
y = Dense(1)(x)
y = LeakyReLU(alpha=0.001)(y)
model = Model(inputs=x, outputs=y)
model.compile(loss='mean_squared_error', optimizer='Adam', metrics=['accuracy'])
for q in range(10):
#generate some samples
model.fit(x, y, epochs=10, batch_size=n_batch, verbose=1, shuffle=False)
model.reset_states()
reset_weights(model)

关于python - for循环内的神经网络,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53001124/

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