利用LSTM來生成文字 程式碼詳解(部分)

2021-09-26 18:32:19 字數 2424 閱讀 7614

# -*-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 中文描述 使用者資訊表...