資源簡介
用RNN實現的一個語言模型(實現的是可以自主生成歌詞,用的是周杰倫的一些歌詞,但由于是自己從網上下來的,前期預處理不是很好,每個人也可以用詩歌等訓練,來生成詩歌)

代碼片段和文件信息
#?-*-?coding:?utf-8?-*-
“““
Created?on?Fri?May?18?11:03:21?2018
@author:?Administrator
“““
with?open(r‘G:\研一\t.txt‘)?as?f:#添加文件
????corpus_chars?=?f.read()
print(len(corpus_chars))
corpus_chars?=?corpus_chars.replace(‘\n‘?‘?‘).replace(‘\r‘?‘?‘)
corpus_chars?=?corpus_chars[0:20000]
idx_to_char?=?list(set(corpus_chars))
char_to_idx?=?dict([(char?i)?for?i?char?in?enumerate(idx_to_char)])
vocab_size?=?len(char_to_idx)
print(‘vocab?size:‘?vocab_size)
corpus_indices?=?[char_to_idx[char]?for?char?in?corpus_chars]
sample?=?corpus_indices[:40]
#print(‘chars:?\n‘?‘‘.join([idx_to_char[idx]?for?idx?in?sample]))
#print(‘\nindices:?\n‘?sample)
import?random
from?mxnet?import?nd
def?data_iter_random(corpus_indices?batch_size?num_steps?ctx=None):
????#?減一是因為label的索引是相應data的索引加一
????num_examples?=?(len(corpus_indices)?-?1)?//?num_steps
????epoch_size?=?num_examples?//?batch_size
????#?隨機化樣本
????example_indices?=?list(range(num_examples))
????random.shuffle(example_indices)
????#?返回num_steps個數據
????def?_data(pos):
????????return?corpus_indices[pos:?pos?+?num_steps]
????for?i?in?range(epoch_size):
????????#?每次讀取batch_size個隨機樣本
????????i?=?i?*?batch_size
????????batch_indices?=?example_indices[i:?i?+?batch_size]
????????data?=?nd.array(
????????????[_data(j?*?num_steps)?for?j?in?batch_indices]?ctx=ctx)
????????label?=?nd.array(
????????????[_data(j?*?num_steps?+?1)?for?j?in?batch_indices]?ctx=ctx)
????????yield?data?label
#my_seq?=?list(range(30))
#for?data?label?in?data_iter_random(my_seq?batch_size=2?num_steps=3):
????#print(‘data:?‘?data?‘\nlabel:‘?label?‘\n‘)
def?data_iter_consecutive(corpus_indices?batch_size?num_steps?ctx=None):
????corpus_indices?=?nd.array(corpus_indices?ctx=ctx)
????data_len?=?len(corpus_indices)
????batch_len?=?data_len?//?batch_size
????indices?=?corpus_indices[0:?batch_size?*?batch_len].reshape((
????????batch_size?batch_len))
????#?減一是因為label的索引是相應data的索引加一
????epoch_size?=?(batch_len?-?1)?//?num_steps
????for?i?in?range(epoch_size):
????????i?=?i?*?num_steps
????????data?=?indices[:?i:?i?+?num_steps]
????????label?=?indices[:?i?+?1:?i?+?num_steps?+?1]
????????yield?data?label
#my_seq?=?list(range(30))
#for?data?label?in?data_iter_consecutive(my_seq?batch_size=2?num_steps=3):
????#print(‘data:?‘?data?‘\nlabel:‘?label?‘\n‘)
nd.one_hot(nd.array([0?2])?vocab_size)
def?get_inputs(data):
????return?[nd.one_hot(X?vocab_size)?for?X?in?data.T]
inputs?=?get_inputs(data)
print(‘input?length:?‘?len(inputs))
print(‘input[0]?shape:?‘?inputs[0].shape)
import?mxnet?as?mx
#?嘗試使用GPU
import?sys
sys.path.append(‘..‘)
import?utilss
ctx?=?utilss.try_gpu()
print(‘Will?use‘?ctx)
input_dim?=?vocab_size
#?隱含狀態長度
hidden_dim?=?256
output_dim?=?vocab_size
std?=?.01
def?get_params():
????#?隱含層
????W_xh?=?nd.random_normal(scale=std?shape=(input_dim?hidden_dim)?ctx=ctx)
????W_hh?=?nd
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????10248??2018-05-18?22:13??555555.py
?????文件??????167894??2018-05-18?14:10??t.txt
?????文件???????16263??2018-05-18?10:05??utilss.py
評論
共有 條評論