部分代码:
print("Defining model...")
model = Sequential()
model.add(Embedding(output_dim=100, input_dim=len(unique_tokens), mask_zero=True))
# model.add(Bidirectional(LSTM(50, return_sequences=True)))
model.add(Bidirectional(LSTM(50, return_sequences=True, activation="tanh",recurrent_activation="sigmoid",recurrent_dropout=0.0, unroll=False,use_bias=True)))
model.add(Dropout(0.2))
# model.add(Bidirectional(LSTM(50, activation="relu", return_sequences=False)))
model.add(Bidirectional(LSTM(50, activation="relu", return_sequences=False,recurrent_activation="sigmoid",recurrent_dropout=0.0, unroll=False,use_bias=True)))
model.add(Dropout(0.2))
model.add(Dense(50, activation="linear"))
model.add(Dropout(0.2))
model.add(Dense(len(unique_tokens), activation="softmax"))
model.compile(loss="categorical_crossentropy", optimizer="nadam", metrics=["accuracy"])
training_data = BatchGenerator(512, np.asarray(X), np.asarray(seq_y), ohe)
model.fit_generator(training_data.__iter__(),
steps_per_epoch=training_data.n_batches,
epochs=1, verbose=1)
在使用keras中的LSTM模型的时候,出现警告:
lstm_1 will not use cuDNN kernel since it doesn't meet the cuDNN kernel criteria.
程序继续向下执行,在model.fig_generator步骤出现下面的错误:
CancelledError: [_Derived_]RecvAsync is cancelled.
[[{{node Nadam/Nadam/update/ReadVariableOp_4/_187}}]]
[[gradient_tape/sequential/embedding/embedding_lookup/Reshape/_176]] [Op:__inference_train_function_19125]
Function call stack:
train_function
https://github.com/keras-team/keras/issues/12379,查询资料后,发现如下图:
可知,这是因为使用keras的时候,虽然keras内部会调用tensorflow的接口,但是,它内部调用的tensorflow的版本并不一定和我们系统中安装的tensorflow的版本相同。因此,下面的库引入的方式存在一定的问题:
from keras.layers import Dense, LSTM, Dropout, Embedding
from keras.layers.wrappers import Bidirectional
from keras.models import Model, Sequential
from keras.utils import np_utils
from keras.layers import TimeDistributed
from keras.models import load_model
所以需要改为如下的库引入方式,即把kerras.xxx.xxx替换为tensorflow.python.keras.xxx.xxx
from tensorflow.python.keras.layers import Dense, LSTM, Dropout, Embedding
from tensorflow.python.keras.layers.wrappers import Bidirectional
from tensorflow.python.keras.models import Model,Sequential
from tensorflow.python.keras.utils import np_utils
from tensorflow.python.keras.layers import TimeDistributed
from tensorflow.python.keras.models import load_model