python 实现 简单的 lstm

来源:互联网 发布:淘宝书店哪家是卖正品 编辑:程序博客网 时间:2024/06/14 11:59
import numpyfrom keras.models import Sequentialfrom keras.layers import Densefrom keras.layers import LSTMfrom keras.utils import np_utils# fix random seed for reproducibilitynumpy.random.seed(7)# define the raw datasetalphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"# create mapping of characters to integers (0-25) and the reversechar_to_int = dict((c, i) for i, c in enumerate(alphabet))int_to_char = dict((i, c) for i, c in enumerate(alphabet))# prepare the dataset of input to output pairs encoded as integersseq_length = 3dataX = []dataY = []for i in range(0, len(alphabet) - seq_length, 1):    seq_in = alphabet[i:i + seq_length]    seq_out = alphabet[i + seq_length]    dataX.append([char_to_int[char] for char in seq_in])    dataY.append(char_to_int[seq_out])    print (seq_in, '->', seq_out)# reshape X to be [samples, time steps, features]X = numpy.reshape(dataX, (len(dataX), 1, seq_length))# normalizeX = X / float(len(alphabet))# one hot encode the output variabley = np_utils.to_categorical(dataY)# create and fit the modelmodel = Sequential()model.add(LSTM(32, input_shape=(X.shape[1], X.shape[2])))model.add(Dense(y.shape[1], activation='softmax'))model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])model.fit(X, y, nb_epoch=500, batch_size=1, verbose=2)# summarize performance of the modelscores = model.evaluate(X, y, verbose=0)print("Model Accuracy: %.2f%%" % (scores[1]*100))# demonstrate some model predictionsfor pattern in dataX:    x = numpy.reshape(pattern, (1, 1, len(pattern)))    x = x / float(len(alphabet))    prediction = model.predict(x, verbose=0)    index = numpy.argmax(prediction)    result = int_to_char[index]    seq_in = [int_to_char[value] for value in pattern]    print (seq_in, "->", result)
原创粉丝点击