代码如下,由于初学Python水平有限,未能确定问题所在,望指正,谢谢大家!
from keras.models import Sequential
from keras.layers import Embedding, Bidirectional, LSTM
from keras_contrib.layers import CRF
import process_data
import pickle
from keras.utils.vis_utils import plot_model
from keras.optimizers import SGD,Adam
EMBED_DIM = 200
BiRNN_UNITS = 200
def create_model(train=True):
if train:
(train_x, train_y), (vocab, chunk_tags) = process_data.load_data()
with open('model/config.pkl', 'wb') as inp:
pickle.dump((vocab, chunk_tags),inp)
else:
with open('model/config.pkl', 'rb') as inp:
(vocab, chunk_tags) = pickle.load(inp)
model = Sequential()
model.add(Embedding(len(vocab), EMBED_DIM, mask_zero=True))
model.add(Bidirectional(LSTM(BiRNN_UNITS // 2, return_sequences=True)))
crf = CRF(len(chunk_tags), sparse_target=True)
model.add(crf)
model.summary()
plot_model(model, to_file="model.png",show_shapes=True)
model.compile(loss=crf.loss_function,optimizer=Adam(lr=0.01), metrics=[crf.accuracy])
if train:
return model, (train_x, train_y)
else:
return model, (vocab, chunk_tags)
keras_contrib这个包你没安装吧,导致crf找不到,你可以看下你最上面导入库的红色波浪线,鼠标放上去会提示你install安装
原因
按照提示,CRF没有安装或者 keras_contrib安装不正确或者没有安装导致的吧
from keras_contrib.layers import CRF
解决方法
下载安装
git clone https://www.github.com/keras-team/keras-contrib.git
cd keras-contrib
python setup.py install
或者使用 pip手动安装
pip install git+https://www.github.com/keras-team/keras-contrib.git
如有问题及时沟通
使用 https://github.com/keras-team/keras-contrib实现的crf layer,
安装 keras-contrib
pip install git+https://www.github.com/keras-team/keras-contrib.git
代码示例:
# coding: utf-8
from keras.models import Sequential
from keras.layers import Embedding
from keras.layers import LSTM
from keras.layers import Bidirectional
from keras.layers import Dense
from keras.layers import TimeDistributed
from keras.layers import Dropout
from keras_contrib.layers.crf import CRF
from keras_contrib.utils import save_load_utils
VOCAB_SIZE = 2500
EMBEDDING_OUT_DIM = 128
TIME_STAMPS = 100
HIDDEN_UNITS = 200
DROPOUT_RATE = 0.3
NUM_CLASS = 5
def build_embedding_bilstm2_crf_model():
"""
带embedding的双向LSTM + crf
"""
model = Sequential()
model.add(Embedding(VOCAB_SIZE, output_dim=EMBEDDING_OUT_DIM, input_length=TIME_STAMPS))
model.add(Bidirectional(LSTM(HIDDEN_UNITS, return_sequences=True)))
model.add(Dropout(DROPOUT_RATE))
model.add(Bidirectional(LSTM(HIDDEN_UNITS, return_sequences=True)))
model.add(Dropout(DROPOUT_RATE))
model.add(TimeDistributed(Dense(NUM_CLASS)))
crf_layer = CRF(NUM_CLASS)
model.add(crf_layer)
model.compile('rmsprop', loss=crf_layer.loss_function, metrics=[crf_layer.accuracy])
return model
def save_embedding_bilstm2_crf_model(model, filename):
save_load_utils.save_all_weights(model,filename)
def load_embedding_bilstm2_crf_model(filename):
model = build_embedding_bilstm2_crf_model()
save_load_utils.load_all_weights(model, filename)
return model
if __name__ == '__main__':
model = build_embedding_bilstm2_crf_model()