目录
前馈神经网络
在前馈神经网络中,每层包含多个神经元,每一层的神经元接受前一层传导的神经元信号,并产生信号输出到下一层。从输入层,经过隐含层(可多层),最后到输出层,整个网络中无反馈,信号从输入层到输出层单向传播。前馈神经网络也被成为多层感知器。
Tensorflow的实现-分类
汽车满意度数据集
import tensorflow as tf
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
读入数据集
data=pd.read_csv("d:/datasets/car.data",names=["buying","maint","doors","person","lug_boot","safety","car_acc"])
数据编码
data_=pd.get_dummies(data.drop("car_acc",axis=1))
data_["car_acc"]=data["car_acc"].map({"unacc":1,"acc":0,"good":0,"vgood":0})
特征标签分离、测试集训练集分离
x=data_.drop("car_acc",axis=1)
y=data_["car_acc"]
from sklearn.model_selection import train_test_split
train_x,test_x,train_y,test_y=train_test_split(x,y,train_size=0.8)
建立神经网络模型
model = tf.keras.Sequential() #实例化
model.add(tf.keras.layers.Dense(32,input_shape=(21,),activation="relu")) #增加一层32节点
model.add(tf.keras.layers.Dense(32,activation="relu"))#增加一层32节点 relu激活
model.add(tf.keras.layers.Dense(32,activation="relu"))#增加一层32节点
#可以根据需要增加隐含层
model.add(tf.keras.layers.Dense(1,activation="sigmoid")) #二分类问题,输出层一个节点,sigmoid激活
model.summary() #查看模型
Model: "sequential" _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= dense (Dense) (None, 32) 704 dense_1 (Dense) (None, 32) 1056 dense_2 (Dense) (None, 32) 1056 dense_3 (Dense) (None, 1) 33 ================================================================= Total params: 2,849 Trainable params: 2,849 Non-trainable params: 0
编译模型
model.compile(optimizer='adam',
metrics=['acc'],
loss='binary_crossentropy', #二分类问题
)
训练模型
his=model.fit(train_x,
train_y,
batch_size=32, #每次取32个样本,一个epochs取,样本数/batch_size次
epochs=50, #epochs数量
validation_data=(test_x,test_y)) #验证集
训练过程可视化
plt.figure(figsize=(14,12))
plt.plot(his.epoch,his.history.get("loss"),label="loss")
plt.plot(his.epoch,his.history.get("val_loss"),label="val_loss")
plt.legend()
结果评价
from sklearn.metrics import classification_report
y_pre=model.predict(test_x)
y_pre_=[round(x) for i in y_pre for x in i ]
print(classification_report(test_y.values,y_pre_))
precision recall f1-score support 0 0.95 1.00 0.98 100 1 1.00 0.98 0.99 246 accuracy 0.99 346 macro avg 0.98 0.99 0.98 346 weighted avg 0.99 0.99 0.99 346