Python 为什么我的神经网络训练这么慢?

Python 为什么我的神经网络训练这么慢?,python,performance,keras,neural-network,deep-learning,Python,Performance,Keras,Neural Network,Deep Learning,我有两个前馈神经网络(用python中的keras构建)执行类似的任务,但训练时间完全不同,我无法找出原因 我有一个神经网络,输入和输出形状: 输入形状:(100000,21)输出形状:(100000,9), 第一个轴是训练样本数,第二个轴分别是输入层和输出层中的节点数。 然后我有另一个神经网络,获取上述输入的子集,并产生上述输出的子集,如下所示: 输入形状:(100000,13)输出形状:(100000,1) 除此之外,设置完全相同。然而,第一个网络的训练速度要快得多,这是什么原因造成的 这些

我有两个前馈神经网络(用python中的keras构建)执行类似的任务,但训练时间完全不同,我无法找出原因

我有一个神经网络,输入和输出形状: 输入形状:(100000,21)输出形状:(100000,9), 第一个轴是训练样本数,第二个轴分别是输入层和输出层中的节点数。 然后我有另一个神经网络,获取上述输入的子集,并产生上述输出的子集,如下所示: 输入形状:(100000,13)输出形状:(100000,1) 除此之外,设置完全相同。然而,第一个网络的训练速度要快得多,这是什么原因造成的

这些设置是: 具有5个隐藏层(128个节点)的回归问题,带有relu激活函数、adam优化器、输出层的线性激活。我想历次的次数也不一样,但就我而言,这不会影响每个历次的训练时间。批大小为64,glorot正常初始化

以下是keras分别为每个网络提供的一些训练输出,请注意,输入和输出节点较少的网络速度明显较慢:

input shape: (100000, 21) output shape: (100000, 9),
Train on 90000 samples, validate on 10000 samples
Epoch 1/500
90000/90000 [==============================] - 3s 31us/step - loss: 0.3145 - val_loss: 0.1749
Epoch 2/500
90000/90000 [==============================] - 2s 23us/step - loss: 0.1426 - val_loss: 0.1298
Epoch 3/500
90000/90000 [==============================] - 2s 23us/step - loss: 0.1161 - val_loss: 0.0999
Epoch 4/500
90000/90000 [==============================] - 2s 
在第二种情况下,每个历元的训练时间不会减少到24秒以上,尽管我预计它会更快,因为任何形式的随机梯度下降都需要更少的梯度计算,输入更少

以下是第一个神经网络的代码:

# initiate:
model = Sequential()

# add hidden layers
model.add(Dense(nodes, input_dim = n, activation='relu', kernel_initializer = 'glorot_normal'))
for i in range(layers):
    model.add(Dense(nodes, activation = 'relu', kernel_initializer = 'glorot_normal'))

# add output
model.add(Dense(out, activation = 'linear', kernel_initializer = 'glorot_normal')) 

# compile the keras model
model.compile(loss='mean_squared_error', optimizer='adam')

# fit the keras model on the dataset
print('input shape:',np.shape(X_norm), 'output shape:', np.shape(L_norm))
history = model.fit(X_norm, L_norm, epochs=epochs, batch_size=batch_size, validation_split = (1/10) 
                   , callbacks = [earlystop]) 
除了model.fit中的输入数量外,第二个网络完全相同:

# fit the keras model on the dataset
    history = model.fit(inputdt, outputdt, epochs=epochs, batch_size=batch_size, validation_split = (1/10) 
                       , verbose = 1, callbacks = [earlystop]) 

其中inputdt和outputdt分别是X_范数和L_范数的切片。

请发布一些代码,可以帮助您创建网络。我添加了构建网络的线路,希望这两个帮助层都是相同的?它是如何定义的?如果在第二次调用中不使用
verbose=1
,会发生什么情况?layers=4在这两种情况下,我只是尝试了一下,不幸的是,更改verbose并没有带来什么不同
# fit the keras model on the dataset
    history = model.fit(inputdt, outputdt, epochs=epochs, batch_size=batch_size, validation_split = (1/10) 
                       , verbose = 1, callbacks = [earlystop])