# -*-coding: utf-8 -*-
# @time:2019/9/119:44
# @author superxjz
# @func lstm
#匯入實驗所需要的各種工具包
import numpy
from keras.models import sequential
from keras.layers import dense
from keras.layers import dropout
from keras.layers import lstm
from keras.callbacks import modelcheckpoint
from keras.utils import np_utils
#文字讀入
raw_text =
open
('../input/winston_churchil.txt'
).read(
)#是大小寫無區別
raw_text = raw_text.lower(
)#我們是以每個字母為層級,字母總共才26個,用one-hot來編碼出所有的字母
chars =
sorted
(list
(set
(raw_text)))
#enumerate在字典上是列舉、列舉的意思,這裡建立了乙個字典,i代表的是前面的序號,c代表的是詞
char_to_int =
dict
((c, i)
for i, c in
enumerate
(chars)
)int_to_char =
dict
((i, c)
for i, c in
enumerate
(chars)
)#我們需要把我們的raw text變成可以用來訓練的x,y:
#設定前後語境有多長
seq_length =
100x =
y =[
]for i in
range(0
,len
(raw_text)
- seq_length)
: given = raw_text[i:i + seq_length]
predict = raw_text[i + seq_length]
#數量化
#這裡呼叫函式返回的是xy各自在詞典中的序號0-61
[char_to_int[char]
for char in given]))
"""接下來我們做兩件事:
我們已經有了乙個input的數字表達(index),我們要把它變成lstm需要的陣列格式: [樣本數,時間步伐,特徵]
第二,對於output,我們在word2vec裡學過,用one-hot做output的**可以給我們更好的效果,相對於直接**乙個準確的y數值的話。
"""#x裡面資料的個數
n_patterns =
len(x)
#n_vocab是60
n_vocab =
len(chars)
# 把x變成lstm需要的樣子,x --->變成len(x)(樣本數)個資料,時間步伐設定為100,特徵是1維的
x = numpy.reshape(x,
(n_patterns, seq_length,1)
)# 簡單normal到0-1之間
x = x /
float
(n_vocab)
# output變成one-hot
y = np_utils.to_categorical(y)
print
(x[11])
print
(y[11])
# lstm模型構建
#模型是前後關係的
model = sequential(
)#lstm層100,1
model.add(lstm(
128, input_shape=
(x.shape[1]
, x.shape[2]
)))model.add(dropout(
0.2)
)#輸出結果的計算,y.shape[1]=61
model.add(dense(y.shape[1]
, activation=
'softmax'))
model.
compile
(loss=
'categorical_crossentropy'
, optimizer=
'adam'
)#模型的訓練
model.fit(x, y, nb_epoch=
10, batch_size=
32)
keras使用LSTM生成文字
本文主要介紹使用lstm實現字元級文字生成。下面是示例 coding utf 8 in 1 import keras import numpy as np path keras.utils.get file nietzsche.txt origin text open path read lower...
利用註解來生成HELLO WORLD
web.xml檔案 springmvc org.springframework.web.servlet.dispatcherservlet contextconfiglocation classpath springmvc.xml 1 do處理器實現類 package controller impo...
利用word vb巨集來生成sql
昨天boss下了個命令讓我用word巨集的方式來快速生成sql,這樣在我們建表的時候就不用在一條一條元資料的輸入。從而提高效率節約成本 這裡的vb巨集要針對固定的資料庫資料字典 進行的。由於 太長就不拿出來了,這裡是word中的 式和vb執行後的結果如下 檔名稱 t test 中文描述 使用者資訊表...