Python 为什么CNN-LSTM比LSTM快?
我对加快速度的原因感到困惑。训练和预测速度都获得了巨大的提高,超过50倍 以下是我创建LSTM模型的方式:Python 为什么CNN-LSTM比LSTM快?,python,keras,time-series,conv-neural-network,lstm,Python,Keras,Time Series,Conv Neural Network,Lstm,我对加快速度的原因感到困惑。训练和预测速度都获得了巨大的提高,超过50倍 以下是我创建LSTM模型的方式: def create_model(learning_rate, num_LSTM_layers, num_LSTM_nodes, dropout_rate): #CREATE THE LSTM NEURAL NETWORK model = Sequential() if num_LSTM_layers > 1:
def create_model(learning_rate, num_LSTM_layers,
num_LSTM_nodes, dropout_rate):
#CREATE THE LSTM NEURAL NETWORK
model = Sequential()
if num_LSTM_layers > 1:
model.add(LSTM(num_LSTM_nodes, return_sequences=True ))
if num_LSTM_layers == 1:
model.add(LSTM(num_LSTM_nodes, return_sequences=False))
model.add(Activation('relu'))
model.add(Dropout(dropout_rate))
if num_LSTM_layers > 1:
for i in range(num_LSTM_layers-1):
if i+1 == num_LSTM_layers-1:
model.add(layers.LSTM(num_LSTM_nodes, return_sequences=False))
else:
model.add(layers.LSTM(num_LSTM_nodes, return_sequences=True))
model.add(Activation('relu'))
model.add(Dropout(dropout_rate))
model.add(Dense(1))
model.add(Activation('linear'))
# Use the Adam method for training the network.
# We want to find the best learning-rate for the Adam method.
optimizer = Adam(lr=learning_rate)
# In Keras we need to compile the model so it can be trained.
model.compile(loss='mean_squared_error', optimizer=optimizer)
return model
def create_model_TD(learning_rate, num_conv_layers, num_LSTM_layers,
num_LSTM_nodes, dropout_rate, filter_size, kernel_height, pool_size):
#CREATE THE LSTM NEURAL NETWORK
model = Sequential()
model.add(TimeDistributed(Conv1D(input_shape=(None, X_train.shape[2], X_train.shape[3]) ,
filters= int(filter_size), kernel_size= int(kernel_height), activation='relu', padding='causal')))
if num_conv_layers == 2:
model.add(TimeDistributed(Conv1D(filters=int(filter_size), kernel_size= int(kernel_height), activation='relu', padding='causal')))
model.add(TimeDistributed(MaxPooling1D(pool_size=int(pool_size))))
model.add(TimeDistributed(Flatten()))
if num_LSTM_layers > 1:
model.add(LSTM(num_LSTM_nodes, return_sequences=True))
if num_LSTM_layers == 1:
model.add(LSTM(num_LSTM_nodes, return_sequences=False))
model.add(Activation('relu'))
model.add(Dropout(dropout_rate))
if num_LSTM_layers > 1:
for i in range(num_LSTM_layers-1):
if i+1 == num_LSTM_layers-1:
model.add(LSTM(num_LSTM_nodes, return_sequences=False))
else:
model.add(LSTM(num_LSTM_nodes, return_sequences=True))
model.add(Activation('relu'))
model.add(Dropout(dropout_rate))
model.add(Dense(1))
model.add(Activation('linear'))
# Use the Adam method for training the network.
# We want to find the best learning-rate for the Adam method.
optimizer = Adam(lr=learning_rate)
# In Keras we need to compile the model so it can be trained.
model.compile(loss='mean_squared_error', optimizer=optimizer)
return model
这就是我创建CNN-LSTM模型的方式:
def create_model(learning_rate, num_LSTM_layers,
num_LSTM_nodes, dropout_rate):
#CREATE THE LSTM NEURAL NETWORK
model = Sequential()
if num_LSTM_layers > 1:
model.add(LSTM(num_LSTM_nodes, return_sequences=True ))
if num_LSTM_layers == 1:
model.add(LSTM(num_LSTM_nodes, return_sequences=False))
model.add(Activation('relu'))
model.add(Dropout(dropout_rate))
if num_LSTM_layers > 1:
for i in range(num_LSTM_layers-1):
if i+1 == num_LSTM_layers-1:
model.add(layers.LSTM(num_LSTM_nodes, return_sequences=False))
else:
model.add(layers.LSTM(num_LSTM_nodes, return_sequences=True))
model.add(Activation('relu'))
model.add(Dropout(dropout_rate))
model.add(Dense(1))
model.add(Activation('linear'))
# Use the Adam method for training the network.
# We want to find the best learning-rate for the Adam method.
optimizer = Adam(lr=learning_rate)
# In Keras we need to compile the model so it can be trained.
model.compile(loss='mean_squared_error', optimizer=optimizer)
return model
def create_model_TD(learning_rate, num_conv_layers, num_LSTM_layers,
num_LSTM_nodes, dropout_rate, filter_size, kernel_height, pool_size):
#CREATE THE LSTM NEURAL NETWORK
model = Sequential()
model.add(TimeDistributed(Conv1D(input_shape=(None, X_train.shape[2], X_train.shape[3]) ,
filters= int(filter_size), kernel_size= int(kernel_height), activation='relu', padding='causal')))
if num_conv_layers == 2:
model.add(TimeDistributed(Conv1D(filters=int(filter_size), kernel_size= int(kernel_height), activation='relu', padding='causal')))
model.add(TimeDistributed(MaxPooling1D(pool_size=int(pool_size))))
model.add(TimeDistributed(Flatten()))
if num_LSTM_layers > 1:
model.add(LSTM(num_LSTM_nodes, return_sequences=True))
if num_LSTM_layers == 1:
model.add(LSTM(num_LSTM_nodes, return_sequences=False))
model.add(Activation('relu'))
model.add(Dropout(dropout_rate))
if num_LSTM_layers > 1:
for i in range(num_LSTM_layers-1):
if i+1 == num_LSTM_layers-1:
model.add(LSTM(num_LSTM_nodes, return_sequences=False))
else:
model.add(LSTM(num_LSTM_nodes, return_sequences=True))
model.add(Activation('relu'))
model.add(Dropout(dropout_rate))
model.add(Dense(1))
model.add(Activation('linear'))
# Use the Adam method for training the network.
# We want to find the best learning-rate for the Adam method.
optimizer = Adam(lr=learning_rate)
# In Keras we need to compile the model so it can be trained.
model.compile(loss='mean_squared_error', optimizer=optimizer)
return model
但当我观察可训练参数的数量时,CNN-LSTM似乎比经典的LSTM有更多的参数。有人知道原因吗?非常感谢您的帮助,谢谢。CNN通过关注关键功能,降低了各种不同的复杂性。卷积层的使用导致张量的大小减小。此外,使用池也会导致进一步的减少。最后但并非最不重要的是,ReLu层降低了复杂性。因为训练时间减少了 美国有线电视新闻网(cnn)更深入的初学者视角