一、基礎數據准備
訓練所需要的數據集合都存儲在數據庫中,還有部分文本文件
首先對數據進行分類結構化存儲[因為涉及到的是多分類問題]
二、整理並存儲原始數據集
1、使用numpy將所有需要數據讀取出來
splitlines() ==> 按照\r \n 或者\r\n分割
import numpy as np import pandas as pd values1 = np.array(open(r'text1.txt', 'r', encoding='utf-8').read().splitlines()) values2 = np.random.choice(open(r'text2.txt', 'r', encoding='utf-8').read().splitlines(),100000)
2、設計標識符
label_map = { 1: 'values1', 2: 'values2', }
3、將所有數據進行拼接
data = np.concatenate([values1,values2])
4、生產相應數量的標識
lable = np.concatenate([np.array([4]*len(values1)),np.array([5]*len(values2))])
5、生成DataFrame數據結構
df = pd.DataFrame({"data":data,"lable":lable})
6、提取數據結構中多余的字符
df.replace('\r|\n|!', '', inplace=True, regex=True)
7、將整合后的原始數據存儲為csv文件
df.to_csv("dataset.csv",sep="!",index=False,header=False)
三、使數據集向量化
from keras.preprocessing.sequence import pad_sequences # 對序列進行預處理生成長度相同的序列 from keras.utils.np_utils import to_categorical # 將標簽轉換為 one-hot 編碼
1、對每個字符進行old操作
def process(s: str): s = str(s).lower() return [ord(c) for c in s] data = df['data'].apply(process).values
2、將序列處理成相同長度的數組
MAX_SEQUENCE_LENGTH = 30 data = pad_sequences(data, maxlen=MAX_SEQUENCE_LENGTH,dtype='int',padding='post',truncating='post')
3、去除數組內重復數字並進行排序之后輸出
palette = np.unique(data)
4、獲取每個字符在palette中的位置
data = np.digitize(data, palette, right=True)
5、將標簽轉化為 one-hot 編碼
labels = to_categorical(df['lable'].values)
6、划分訓練子集與測試子集
from sklearn.model_selection import train_test_split train_data, val_data, train_label, val_label = train_test_split(data, labels, test_size=0.2, random_state=42) print('train data shape: ', train_data.shape, ' train label shape: ', train_label.shape) print('val data shape: ', val_data.shape, ' val label shape: ', val_label.shape)