tflearn教程_TFlearn 快速入门

本教程介绍如何使用TFLearn和TensorFlow建立一个深度神经网络,以预测泰坦尼克号乘客的生存率。首先,加载和预处理数据,包括丢弃无关特征,将类别数据转换为数值。接着,构建一个3层神经网络模型,并进行训练。经过10个epoch的训练,模型的准确率达到了约81%。最后,使用模型预测了迪卡普里奥和温斯莱特的生存概率。
摘要由CSDN通过智能技术生成

在本教程中,您将学习使用TFLearn和TensorFlow来估计泰坦尼克号乘客使用其个人信息(如性别,年龄等)的幸存机会。 为了解决这个经典机器学习任务,我们要构建一个深层神经网络分类器。

前提条件

确保已经安装了TensorFlow和tflearn。 如果没有,请先根据教程安装 。

概述

介绍

1912年4月15日,泰坦尼克号在与冰山相撞后沉没,在2224名乘客和船员中造成1502人死亡。 虽然不幸遇难下沉,但一些群体比如女性,儿童和上层阶级更有可能生存下去。 在本教程中,我们进行分析,以了解这些人是谁。

数据集

我们来看看数据集(TFLearn会自动为你下载)。 对于每位乘客,提供以下信息:

VARIABLE DESCRIPTIONS:

survived Survived

(0 = No; 1 = Yes)

pclass Passenger Class

(1 = 1st; 2 = 2nd; 3 = 3rd)

name Name

sex Sex

age Age

sibsp Number of Siblings/Spouses Aboard

parch Number of Parents/Children Aboard

ticket Ticket Number

fare Passenger Fare

以下是从数据集中提取的一些样本:

survived

pclass

name

sex

age

sibsp

parch

ticket

fare

1

1

Aubart, Mme. Leontine Pauline

female

24

0

0

PC 17477

69.3000

0

2

Bowenur, Mr. Solomon

male

42

0

0

211535

13.0000

1

3

Baclini, Miss. Marie Catherine

female

5

2

1

2666

19.2583

0

3

Youseff, Mr. Gerious

male

45.5

0

0

2628

7.2250

我们的任务是区分2种类型的乘客未存活(标签0)和“存活的”(标签1),乘客数据有8个特征。

构建分类器

加载数据

数据集存储在csv文件中,因此我们可以使用TFLearn load_csv()函数将文件中的数据加载到python list 。 我们指定'target_column'参数来表示我们的标签(存活或未存活)位于第一列(id:0)。 该函数将返回一个元组:(数据,标签)。

import numpy as np

import tflearn

# Download the Titanic dataset

from tflearn.datasets import titanic

titanic.download_dataset('titanic_dataset.csv')

# Load CSV file, indicate that the first column represents labels

from tflearn.data_utils import load_csv

data, labels = load_csv('titanic_dataset.csv', target_column=0,

categorical_labels=True, n_classes=2)

预处理数据

给出的数据需要一些预处理才能在我们的深度神经网络分类器中使用。

首先,我们将丢弃在我们的分析中不太可能帮助的领域。 例如,我们假设“姓名”字段在我们的任务中将不会很有用,因为我们估计一个乘客姓名和他的生存机会是不相关的。 有了这样的想法,我们抛弃了“名字”和“票”字段。

然后,我们需要将所有的数据转换为数值,因为神经网络模型只能对数字执行操作。 但是,我们的数据集包含一些非数值值,例如'name'或'sex'。 因为'name'被丢弃,我们只需要处理'sex'字段。 在这种简单的情况下,我们将把'0'分配给男性,'1'分配给女性。

这是预处理函数:

# Preprocessing function

def preprocess(passengers, columns_to_delete):

# Sort by descending id and delete columns

for column_to_delete in sorted(columns_to_delete, reverse=True):

[passenger.pop(column_to_delete) for passenger in passengers]

for i in range(len(passengers)):

# Converting 'sex' field to float (id is 1 after removing labels column)

passengers[i][1] = 1. if passengers[i][1] == 'female' else 0.

return np.array(passengers, dtype=np.float32)

# Ignore 'name' and 'ticket' columns (id 1 & 6 of data array)

to_ignore=[1, 6]

# Preprocess data

data = preprocess(data, to_ignore)

建立深度神经网络

我们正在使用TFLearn构建一个3层神经网络。 我们需要指定输入数据的形状。 在我们的示例中,每个样本共有6个特征,我们将处理每批次的样本以节省内存,因此我们的数据输入形状为[None,6](“None”代表未知维度,因此我们可以更改在批处理中的样本总数)。

# Build neural network

net = tflearn.input_data(shape=[None, 6])

net = tflearn.fully_connected(net, 32)

net = tflearn.fully_connected(net, 32)

net = tflearn.fully_connected(net, 2, activation='softmax')

net = tflearn.regression(net)

训练

TFLearn提供了一个可以自动执行神经网络分类器任务的模型包装器“DNN”,例如训练,预测,保存/恢复等...我们将运行10个次(神经网络将处理所有数据10次)批量大小为16。

# Define model

model = tflearn.DNN(net)

# Start training (apply gradient descent algorithm)

model.fit(data, labels, n_epoch=10, batch_size=16, show_metric=True)

输出:

---------------------------------

Run id: MG9PV8

Log directory: /tmp/tflearn_logs/

---------------------------------

Training samples: 1309

Validation samples: 0

--

Training Step: 82 | total loss: 0.64003

| Adam | epoch: 001 | loss: 0.64003 - acc: 0.6620 -- iter: 1309/1309

--

Training Step: 164 | total loss: 0.61915

| Adam | epoch: 002 | loss: 0.61915 - acc: 0.6614 -- iter: 1309/1309

--

Training Step: 246 | total loss: 0.56067

| Adam | epoch: 003 | loss: 0.56067 - acc: 0.7171 -- iter: 1309/1309

--

Training Step: 328 | total loss: 0.51807

| Adam | epoch: 004 | loss: 0.51807 - acc: 0.7799 -- iter: 1309/1309

--

Training Step: 410 | total loss: 0.47475

| Adam | epoch: 005 | loss: 0.47475 - acc: 0.7962 -- iter: 1309/1309

--

Training Step: 492 | total loss: 0.51677

| Adam | epoch: 006 | loss: 0.51677 - acc: 0.7701 -- iter: 1309/1309

--

Training Step: 574 | total loss: 0.48988

| Adam | epoch: 007 | loss: 0.48988 - acc: 0.7891 -- iter: 1309/1309

--

Training Step: 656 | total loss: 0.55073

| Adam | epoch: 008 | loss: 0.55073 - acc: 0.7427 -- iter: 1309/1309

--

Training Step: 738 | total loss: 0.50242

| Adam | epoch: 009 | loss: 0.50242 - acc: 0.7854 -- iter: 1309/1309

--

Training Step: 820 | total loss: 0.41557

| Adam | epoch: 010 | loss: 0.41557 - acc: 0.8110 -- iter: 1309/1309

--

我们的模型完成训练,总体精度达到81%左右,这意味着它能以81%的准确率预测结果(乘客的存活与否)。

测试模型

现在是测试我们的模型的时候了。 为了乐趣,我们来看看泰坦尼克号电影的主角(DiCaprio和温斯莱特),并计算他们的生存机会(1级)。

# Let's create some data for DiCaprio and Winslet

dicaprio = [3, 'Jack Dawson', 'male', 19, 0, 0, 'N/A', 5.0000]

winslet = [1, 'Rose DeWitt Bukater', 'female', 17, 1, 2, 'N/A', 100.0000]

# Preprocess data

dicaprio, winslet = preprocess([dicaprio, winslet], to_ignore)

# Predict surviving chances (class 1 results)

pred = model.predict([dicaprio, winslet])

print("DiCaprio Surviving Rate:", pred[0][1])

print("Winslet Surviving Rate:", pred[1][1])

输出:

DiCaprio Surviving Rate: 0.13849584758281708

Winslet Surviving Rate: 0.92201167345047

令人印象深刻! 我们的模型准确预测了电影的结果。 DiCaprio生存机会不大,但温斯莱特有很高的生存机会。

更一般来说,通过这项研究可以看出,头等舱的妇女和儿童乘客的生存机会最高,而三等舱男性乘客生存机会最少。

源代码

from __future__ import print_function

import numpy as np

import tflearn

# Download the Titanic dataset

from tflearn.datasets import titanic

titanic.download_dataset('titanic_dataset.csv')

# Load CSV file, indicate that the first column represents labels

from tflearn.data_utils import load_csv

data, labels = load_csv('titanic_dataset.csv', target_column=0,

categorical_labels=True, n_classes=2)

# Preprocessing function

def preprocess(passengers, columns_to_delete):

# Sort by descending id and delete columns

for column_to_delete in sorted(columns_to_delete, reverse=True):

[passenger.pop(column_to_delete) for passenger in passengers]

for i in range(len(passengers)):

# Converting 'sex' field to float (id is 1 after removing labels column)

passengers[i][1] = 1. if data[i][1] == 'female' else 0.

return np.array(passengers, dtype=np.float32)

# Ignore 'name' and 'ticket' columns (id 1 & 6 of data array)

to_ignore=[1, 6]

# Preprocess data

data = preprocess(data, to_ignore)

# Build neural network

net = tflearn.input_data(shape=[None, 6])

net = tflearn.fully_connected(net, 32)

net = tflearn.fully_connected(net, 32)

net = tflearn.fully_connected(net, 2, activation='softmax')

net = tflearn.regression(net)

# Define model

model = tflearn.DNN(net)

# Start training (apply gradient descent algorithm)

model.fit(data, labels, n_epoch=10, batch_size=16, show_metric=True)

# Let's create some data for DiCaprio and Winslet

dicaprio = [3, 'Jack Dawson', 'male', 19, 0, 0, 'N/A', 5.0000]

winslet = [1, 'Rose DeWitt Bukater', 'female', 17, 1, 2, 'N/A', 100.0000]

# Preprocess data

dicaprio, winslet = preprocess([dicaprio, winslet], to_ignore)

# Predict surviving chances (class 1 results)

pred = model.predict([dicaprio, winslet])

print("DiCaprio Surviving Rate:", pred[0][1])

print("Winslet Surviving Rate:", pred[1][1])

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值