大家好,我是微学AI,今天给大家介绍一下深度学习技巧应用8-各种数据类型的加载与处理,并输入神经网络进行训练。在模型训练中,大家往往对各种的数据类型比较难下手,对于非结构化数据已经复杂的数据的要进行特殊处理,这里介绍一下我们如何进行数据处理才能输入到模型中,进行训练的,说白了就是将数据进行0,1化,让计算机读懂数据。我总结了三种类型的数据,后期还会继续总结。
一、模型训练中的数据处理的步骤:
1.数据读取:从数据源(例如文件、数据库等)读取数据。
2.数据预处理:对原始数据进行处理,使其更适合用于模型的训练。这可能包括特征提取、规范化和缩放等操作。
3.数据划分:将预处理后的数据划分为训练集、验证集和测试集,以便进行训练和评估。
4.数据增强:对于图像和视频等数据类型,可以通过旋转、剪裁、平移等方法扩充数据集,以增加模型的泛化能力。
二、结构化数据样例
假设我们有一个数据集包含房屋的信息,如面积、卧室数量、楼层数等等。我们可以使用pandas库读取CSV格式的数据文件,并对数据进行预处理,数据样例:
Area | bedroom | floor_num | price |
100 | 3 | 2 | 200 |
80 | 2 | 1 | 150 |
120 | 4 | 3 | 250 |
130 | 4 | 7 | 270 |
90 | 3 | 4 | 190 |
结构化数据处理:
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
# 读取CSV文件
data = pd.read_csv('house_data.csv')
# 分离特征和目标变量
X = data.drop('price', axis=1)
y = data['price']
# 划分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 特征缩放
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
print(X_train)
print(X_test)
三、文本数据样例
假设我们有一个情感分析的任务,需要对电影评论进行分类。我们可以使用nltk库读取文本文件,并对文本进行预处理。电影评论的数据集,包含评论内容和情感标签(正面或负面)。该数据集可以表示为一个由若干个字符串组成的列表,每个字符串代表一个电影评论,对应的情感标签可以表示为整数0或1。数据样例:
这部电影非常好看,推荐给大家! 1 剧情老套,不值得一看。 0 演员功力很出色,赞一个! 1 节奏很快,紧凑有力。 1 太烂了,一点都不好看。 0 不好,一点都不好看。 0 这部电影还行,下次再看! 1 演员太差,电影不好! 0 非常好看,大家可以一起看! 1 大家有空可以看,挺不错的呢 1 不好看!不好看! 0 这部电影根本就不好看! 0
import nltk
import string
from nltk.corpus import stopwords
from tensorflow.keras.preprocessing.text import Tokenizer
from tensorflow.keras.preprocessing.sequence import pad_sequences
from tensorflow.keras.utils import to_categorical
# 读取文本文件
with open('movie_reviews.txt', 'r',encoding='utf-8') as f:
reviews = f.readlines()
# 分离特征和目标变量
X = [review.split(' ')[0] for review in reviews]
y = [int(review.split(' ')[1]) for review in reviews]
# 文本预处理
stop_words = set(stopwords.words('english'))
def preprocess(text):
# 去除标点符号
text = text.translate(str.maketrans('', '', string.punctuation))
# 转换为小写
text = text.lower()
# 去除停用词
words = [word for word in text.split() if word not in stop_words]
return ' '.join(words)
X = [preprocess(review) for review in X]
# 将文本转换为序列
tokenizer = Tokenizer(num_words=500)
tokenizer.fit_on_texts(X)
X_seq = tokenizer.texts_to_sequences(X)
# 进行padding和truncating操作
X_seq = pad_sequences(X_seq, maxlen=100)
# 将目标变量转换为独热编码
y_cat = to_categorical(y)
# 构建LSTM模型(示例代码)
from keras.models import Sequential
from keras.layers import Embedding, LSTM, Dense
model = Sequential()
model.add(Embedding(input_dim=500, output_dim=32, input_length=100))
model.add(LSTM(units=32))
model.add(Dense(units=2, activation='softmax'))
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
model.fit(x=X_seq, y=y_cat, epochs=20, batch_size=10, validation_split=0.2)
四、图片数据样例
假设我们有一个图像分类的任务,需要对多个图片进行分类。我们可以使用opencv库读取图片文件,并对图片进行预处理,要将多个图像数据批量输入到CNN模型中进行训练,需要提供一组训练数据和对应的标签。假设我们有10个数字图片,分别保存为digit_0.png到digit_9.png,并且对应的标签为0到9。可以使用以下代码将这些数据读取并转换为张量格式:
import cv2
import numpy as np
from keras.models import Sequential
from keras.layers import Dense,MaxPooling2D,Flatten,Conv2D
# 读取多个图片文件,并将它们堆叠成一个张量
X = []
Y = []
for i in range(10):
img = cv2.imread(f'digit_{i}.png', cv2.IMREAD_GRAYSCALE)
img = cv2.threshold(img, 128, 255, cv2.THRESH_BINARY)[1] # 二值化处理
img = cv2.resize(img, (28, 28)) # 调整大小为28x28
img = img.astype(np.float32) / 255.0 # 归一化处理
X.append(img)
Y.append(i)
X = np.stack(X, axis=0)
X = np.expand_dims(X, axis=-1) # 添加通道维度
Y = np.array(Y)
# 构建简单的CNN模型
model = Sequential()
model.add(Conv2D(filters=32, kernel_size=(3,3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Flatten())
model.add(Dense(units=128, activation='relu'))
model.add(Dense(units=10, activation='softmax'))
# 编译模型
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
# 训练模型
model.fit(X, Y, epochs=10, batch_size=32, validation_split=0.2)
大家现在应该清楚数据处理部分的内容了吧,这个是关键,数据没有处理好,模型就加载不到格式化的数据,就没有下一步训练的过程了。