最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

keras 簡(jiǎn)單 lstm實(shí)例(基于one-hot編碼)

 更新時(shí)間:2020年07月02日 10:19:59   作者:趕圩歸來阿理理  
這篇文章主要介紹了keras 簡(jiǎn)單 lstm實(shí)例(基于one-hot編碼),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧

簡(jiǎn)單的LSTM問題,能夠預(yù)測(cè)一句話的下一個(gè)字詞是什么

固定長(zhǎng)度的句子,一個(gè)句子有3個(gè)詞。

使用one-hot編碼

各種引用

import keras
from keras.models import Sequential
from keras.layers import LSTM, Dense, Dropout
import numpy as np

數(shù)據(jù)預(yù)處理

data = 'abcdefghijklmnopqrstuvwxyz'
data_set = set(data)
 
word_2_int = {b:a for a,b in enumerate(data_set)}
int_2_word = {a:b for a,b in enumerate(data_set)}
 
word_len = len(data_set)
print(word_2_int)
print(int_2_word)

一些輔助函數(shù)

def words_2_ints(words):
 ints = []
 for itmp in words:
  ints.append(word_2_int[itmp])
 return ints
 
print(words_2_ints('ab'))
 
def words_2_one_hot(words, num_classes=word_len):
 return keras.utils.to_categorical(words_2_ints(words), num_classes=num_classes)
print(words_2_one_hot('a'))
def get_one_hot_max_idx(one_hot):
 idx_ = 0
 max_ = 0
 for i in range(len(one_hot)):
  if max_ < one_hot[i]:
   max_ = one_hot[i]
   idx_ = i
 return idx_
 
def one_hot_2_words(one_hot):
 tmp = []
 for itmp in one_hot:
  tmp.append(int_2_word[get_one_hot_max_idx(itmp)])
 return "".join(tmp)
 
print( one_hot_2_words(words_2_one_hot('adhjlkw')) )

構(gòu)造樣本

time_step = 3 #一個(gè)句子有3個(gè)詞
 
def genarate_data(batch_size=5, genarate_num=100):
 #genarate_num = -1 表示一直循環(huán)下去,genarate_num=1表示生成一個(gè)batch的數(shù)據(jù),以此類推
 #這里,我也不知道數(shù)據(jù)有多少,就這么循環(huán)的生成下去吧。
 #入?yún)atch_size 控制一個(gè)batch 有多少數(shù)據(jù),也就是一次要yield進(jìn)多少個(gè)batch_size的數(shù)據(jù)
 '''
 例如,一個(gè)batch有batch_size=5個(gè)樣本,那么對(duì)于這個(gè)例子,需要yield進(jìn)的數(shù)據(jù)為:
 abc->d
 bcd->e
 cde->f
 def->g
 efg->h
 然后把這些數(shù)據(jù)都轉(zhuǎn)換成one-hot形式,最終數(shù)據(jù),輸入x的形式為:
 
 [第1個(gè)batch]
 [第2個(gè)batch]
 ...
 [第genarate_num個(gè)batch]
 
 每個(gè)batch的形式為:
 
 [第1句話(如abc)]
 [第2句話(如bcd)]
 ...
 每一句話的形式為:
 
 [第1個(gè)詞的one-hot表示]
 [第2個(gè)詞的one-hot表示]
 ...
 '''
 cnt = 0
 batch_x = []
 batch_y = []
 sample_num = 0
 while(True):
  for i in range(len(data) - time_step):
   batch_x.append(words_2_one_hot(data[i : i+time_step]))
   batch_y.append(words_2_one_hot(data[i+time_step])[0]) #這里數(shù)據(jù)加[0],是為了符合keras的輸出數(shù)據(jù)格式。 因?yàn)椴患覽0],表示是3維的數(shù)據(jù)。 你可以自己嘗試不加0,看下面的test打印出來是什么
   sample_num += 1
   #print('sample num is :', sample_num)
   if len(batch_x) == batch_size:
    yield (np.array(batch_x), np.array(batch_y))
    batch_x = []
    batch_y = []
    if genarate_num != -1:
     cnt += 1
 
    if cnt == genarate_num:
     return
   
for test in genarate_data(batch_size=3, genarate_num=1):
 print('--------x:')
 print(test[0])
 print('--------y:')
 print(test[1])

搭建模型并訓(xùn)練

model = Sequential()
 
# LSTM輸出維度為 128
# input_shape控制輸入數(shù)據(jù)的形態(tài)
# time_stemp表示一句話有多少個(gè)單詞
# word_len 表示一個(gè)單詞用多少維度表示,這里是26維
 
model.add(LSTM(128, input_shape=(time_step, word_len)))
model.add(Dense(word_len, activation='softmax')) #輸出用一個(gè)softmax,來分類,維度就是26,預(yù)測(cè)是哪一個(gè)字母
 
model.compile(loss='categorical_crossentropy', optimizer='rmsprop', metrics=['accuracy'])
 
model.fit_generator(generator=genarate_data(batch_size=5, genarate_num=-1), epochs=50, steps_per_epoch=10)
#steps_per_epoch的意思是,一個(gè)epoch中,執(zhí)行多少個(gè)batch
#batch_size是一個(gè)batch中,有多少個(gè)樣本。
#所以,batch_size*steps_per_epoch就等于一個(gè)epoch中,訓(xùn)練的樣本數(shù)量。(這個(gè)說法不對(duì)!再觀察看看吧)
#可以將epochs設(shè)置成1,或者2,然后在genarate_data中打印樣本序號(hào),觀察到樣本總數(shù)。

使用訓(xùn)練后的模型進(jìn)行預(yù)測(cè):

result = model.predict(np.array([words_2_one_hot('bcd')]))

print(one_hot_2_words(result))

可以看到,預(yù)測(cè)結(jié)果為

e

補(bǔ)充知識(shí):訓(xùn)練集產(chǎn)生的onehot編碼特征如何在測(cè)試集、預(yù)測(cè)集復(fù)現(xiàn)

數(shù)據(jù)處理中有時(shí)要用到onehot編碼,如果使用pandas自帶的get_dummies方法,訓(xùn)練集產(chǎn)生的onehot編碼特征會(huì)跟測(cè)試集、預(yù)測(cè)集不一樣,正確的方式是使用sklearn自帶的OneHotEncoder。

代碼

import pandas as pd
from sklearn.preprocessing import OneHotEncoder
ohe = OneHotEncoder(handle_unknown='ignore')
data_train=pd.DataFrame({'職業(yè)':['數(shù)據(jù)挖掘工程師','數(shù)據(jù)庫開發(fā)工程師','數(shù)據(jù)分析師','數(shù)據(jù)分析師'],
     '籍貫':['福州','廈門','泉州','龍巖']})
ohe.fit(data_train)#訓(xùn)練規(guī)則
feature_names=ohe.get_feature_names(data_train.columns)#獲取編碼后的特征名
data_train_onehot=pd.DataFrame(ohe.transform(data_train).toarray(),columns=feature_names)#應(yīng)用規(guī)則在訓(xùn)練集上
 
data_new=pd.DataFrame({'職業(yè)':['數(shù)據(jù)挖掘工程師','jave工程師'],
     '籍貫':['福州','莆田']})
data_new_onehot=pd.DataFrame(ohe.transform(data_new).toarray(),columns=feature_names)#應(yīng)用規(guī)則在預(yù)測(cè)集上

以上這篇keras 簡(jiǎn)單 lstm實(shí)例(基于one-hot編碼)就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • python捕獲警告的三種方法

    python捕獲警告的三種方法

    這篇文章主要介紹了python捕獲警告的三種方法,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下
    2021-03-03
  • python爬蟲xpath模塊簡(jiǎn)介示例代碼

    python爬蟲xpath模塊簡(jiǎn)介示例代碼

    xpath是最常用且最便捷高效的一種解析方式,通用型強(qiáng),其不僅可以用于python語言中,還可以用于其他語言中,數(shù)據(jù)解析建議首先xpath,這篇文章主要介紹了python爬蟲xpath模塊簡(jiǎn)介,需要的朋友可以參考下
    2023-02-02
  • 詳解Python給照片換底色(藍(lán)底換紅底)

    詳解Python給照片換底色(藍(lán)底換紅底)

    這篇文章主要介紹了詳解Python給照片換底色(藍(lán)底換紅底),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • Python中MYSQLdb出現(xiàn)亂碼的解決方法

    Python中MYSQLdb出現(xiàn)亂碼的解決方法

    這篇文章主要介紹了Python中MYSQLdb出現(xiàn)亂碼的解決方法,是Python操作MySQL數(shù)據(jù)庫程序設(shè)計(jì)中非常常見的問題,需要的朋友可以參考下
    2014-10-10
  • Python數(shù)據(jù)列表中的空補(bǔ)0的問題解決

    Python數(shù)據(jù)列表中的空補(bǔ)0的問題解決

    在Python中,如果你有一個(gè)包含空值的數(shù)據(jù)列表,你可以使用列表推導(dǎo)式或循環(huán)將這些空值替換為0,本文就來介紹一下如何解決,感興趣的可以了解一下
    2024-03-03
  • Python Learning 列表的更多操作及示例代碼

    Python Learning 列表的更多操作及示例代碼

    這篇文章主要介紹了Python Learning-列表的更多操作,需要的朋友可以參考下
    2018-08-08
  • 解決Python3中的中文字符編碼的問題

    解決Python3中的中文字符編碼的問題

    Unicode是一32位編碼格式,不適合用來傳輸和存儲(chǔ),所以必須轉(zhuǎn)換成utf-8,gbk等等。這篇文章主要介紹了Python3中的解決中文字符編碼的問題,需要的朋友可以參考下
    2018-07-07
  • python 對(duì)一幅灰度圖像進(jìn)行直方圖均衡化

    python 對(duì)一幅灰度圖像進(jìn)行直方圖均衡化

    這篇文章主要介紹了python 如何對(duì)一幅灰度圖像進(jìn)行直方圖均衡化,幫助大家更好的利用python處理圖像,感興趣的朋友可以了解下
    2020-10-10
  • Django模型修改及數(shù)據(jù)遷移實(shí)現(xiàn)解析

    Django模型修改及數(shù)據(jù)遷移實(shí)現(xiàn)解析

    這篇文章主要介紹了Django模型修改及數(shù)據(jù)遷移實(shí)現(xiàn)解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • 解決python訓(xùn)練模型報(bào)錯(cuò):BrokenPipeError:?[Errno?32]?Broken?pipe

    解決python訓(xùn)練模型報(bào)錯(cuò):BrokenPipeError:?[Errno?32]?Broken?pipe

    這篇文章主要介紹了解決python訓(xùn)練模型報(bào)錯(cuò):BrokenPipeError:?[Errno?32]?Broken?pipe問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07

最新評(píng)論

六枝特区| 若尔盖县| 友谊县| 澄城县| 嘉峪关市| 新干县| 新沂市| 安康市| 永修县| 中江县| 通江县| 墨竹工卡县| 城步| 西城区| 石城县| 丰原市| 博乐市| 红桥区| 遵义县| 怀仁县| 民县| 青河县| 休宁县| 彩票| 宁津县| 洛川县| 宁晋县| 通榆县| 桐柏县| 东城区| 阿拉善右旗| 依兰县| 高唐县| 荔浦县| 剑阁县| 深圳市| 民权县| 漳平市| 洛扎县| 宜宾市| 宜阳县|