TensorFlow 是一个由 Google 开发的开源深度学习框架,用于构建、训练和部署机器学习模型。它提供了丰富的工具和库,支持各种机器学习任务,包括神经网络、深度学习、强化学习等。
注意,TensorFlow是深度学习框架,作为一个框架,他提供了许多高级API,例如:
这些API可以为代码的编写带来极大地便利,其中最常用有keras,nn等。我这里主要介绍keras。
一、keras
keras为构建、训练和部署深度学习模型提供了简单且直观的接口。官方文档
通过这些接口,可以大大减少我们的工作量。
二、导入需要的包
import tensorflow as tf
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from keras import layers
from tensorflow.python import keras
from sklearn import preprocessing
三、数据准备
这里我随便用了一个数据集,是物联网设备的网络流量数据,根据情况选用自己的数据集即可。
use_data=pd.read_csv('danmini_traffic.csv' ,header = None)
features = np.array(use_data.iloc[:, range(0, use_data.shape[1] - 1)])
根据数据情况决定是否需要标准化
#input_features = preprocessing.StandardScaler().fit_transform(features)
labels = use_data.iloc[:, -1]
四、模型构建
4.1 模型无需初始化的方式
model = tf.keras.Sequential(
[layers.Dense(32, activation='sigmoid'),
layers.Dense(32, activation='sigmoid'),
layers.Dense(32, activation='sigmoid'),
layers.Dense(1)]
)
这是最简单的网络结构,一共有四层网络。这里可以查看官方文档,选择需要的网络和激活函数等。
4.2 模型需初始化的方式
class CreateModel(Model):
def __init__(self):
super(CustomModel, self).__init__()
self.dense1 = layers.Dense(32, activation='sigmoid')
self.dense2 = layers.Dense(32, activation='sigmoid')
self.dense3 = layers.Dense(32, activation='sigmoid')
self.output_layer = layers.Dense(1)
def call(self, inputs):
x = self.dense1(inputs)
x = self.dense2(x)
x = self.dense3(x)
return self.output_layer(x)
model=CreateModel()
这是类似PyTorch定义模型的方式,这种方式在创建模型后,只是创建了模型的结构,但是模型并未初始化,这个是否初始化对于大部分情况来说没有影响,只在特定情况下需要初始化,例如需要设置权重时,一个未初始化的模型是无法通过set_weights()来直接设置权重的。
五、模型训练
#加载模型
model.compile(optimizer=tf.keras.optimizers.SGD(0.001),#
loss='mean_squared_error', # 损失函数
metrics=['mse'])
#开始训练
history = model.fit(features,labels,batch_size=50, epochs=50, validation_split=0.1, verbose=1)
训练结果:
可以看到,训练结果很不错。损失值较小,因为这里使用的是监督学习,所以准确率偏高, 训练集和测试集的损失值差别不大,说明没有出现过拟合或欠拟合的情况。
打印一下网络模型结构: