Tensorflow1.0基础学习--1.titanic分类问题

库文件

1.pandas
2. numpy
3. sklearn
4. tensorflow1.0

思维导图

在这里插入图片描述

一、数据读入及预处理

data = pd.read_csv('./data/train.csv')
data.info()

########
# 一、数据读入及预处理
# 取用部分特征字段用来分类,并将缺失字段补0
data['Sex'] = data['Sex'].apply(lambda s: 1 if s == 'male' else 0)
data = data.fillna(0)
dataset_X = data[['Sex', 'Age', 'Pclass', 'SibSp', 'Parch', 'Fare']]
# dataset_X = dataset_X.as_martix()
# 高版本pandas没有as_matrix函数,采用np.array代替
dataset_X = np.array(dataset_X)
# 创建Deceased字段,取值为Survived字段取非
data['Deceased'] = data['Survived'].apply(lambda s: 1 - s)
dataset_Y = data[['Deceased', 'Survived']]
dataset_Y = np.array(dataset_Y)
# 使用sklearn中的train_test_split函数将标记数据进行切割。切分成数据集和测试集两部分。验证数据占20%
X_train, X_test, Y_train, Y_test = train_test_split(dataset_X, dataset_Y, test_size=0.2, random_state=42)
########

二、构建计算图

#######
# 二、构建计算图
# 1.使用placeholder声明输入占位符
X = tf.placeholder(tf.float32, shape=[None, 6])
Y = tf.placeholder(tf.float32, shape=[None, 2])
# 2.声明参数变量
weights = tf.Variable(tf.random_normal([6, 2]), name='weights')
bias = tf.Variable(tf.zeros([2]), name='bias')

saver = tf.train.Saver(max_to_keep=3)  # 在要存储的变量后定义saver,max_to_keep定义了需要保存的版本数量
# 3.构造向前传播计算图
Y_pred = tf.nn.softmax(tf.matmul(X, weights) + bias)  # matmul为乘法算子
# 4.声明代价函数
# 本例程采用交叉熵作为代价函数(cross entropy)
cross_entropy = -tf.reduce_sum(Y * tf.log(Y_pred + 1e-10), reduction_indices=1)
# 注:在计算log()函数时最好机上一个极小误差,使计算合法
# 批量样本的代价值为所有样本交叉熵的平均值
cost = tf.reduce_mean(cross_entropy)
# 5.加入优化算法
# 使用随机梯度算法SGD优化器来最小化代价,系统自动构建反向传播部分的计算图
train_op = tf.train.GradientDescentOptimizer(0.001).minimize(cost)
# 计算图声明完成
#######

三、构建训练迭代过程

#######
# 三、构建训练迭代过程
# 通过session接口完成
# 通过with语句将session作为上下文管理器进行操作,退出作用域自动释放资源。
# gpu模式,在出现显存不足时会报错。采用下两行代码对tf.session进行配置
config = tf.ConfigProto()
config.gpu_options.allow_growth = True

with tf.Session(config=config) as sess:
    # 初始化所有变量,必须最先执行!!!!
    tf.global_variables_initializer().run()
    # 以下为训练迭代。10轮。
    for epoch in range(10):
        total_loss = 0
        for i in range(len(X_train)):
            feed = {X: [X_train[i]], Y: [Y_train[i]]}
            # 通过session.run接口触发执行
            _, loss = sess.run([train_op, cost], feed_dict=feed)
            total_loss += loss
        print('Epoch: %04d, total loss = %.9f' % (epoch + 1, total_loss))
        saver.save(sess, './saved_model/my_model.ckpt', global_step=epoch)# 循环保存模型。名称为my_model.ckpt。后缀为epoch次数
    print('Training complete!')
    # save_path = saver.save(sess, "model_sess1.ckpt")# 保存模型
    pred = sess.run(Y_pred, feed_dict={X: X_test})
    correct = np.equal(np.argmax(pred, 1), np.argmax(Y_test, 1))
    numpy_accuracy = np.mean(correct.astype(np.float32))
    print("Accuracy on validation set (numpy): %.9f" % numpy_accuracy)
# 评估校验数据集中的准确率
#######

四、进行预测


#######
# 四、进行预测
# 通过session接口完成
# 通过with语句将session作为上下文管理器进行操作,退出作用域自动释放资源。
# gpu模式,在出现显存不足时会报错。采用下两行代码对tf.session进行配置
config = tf.ConfigProto()
config.gpu_options.allow_growth = True
testdata = pd.read_csv('./data/test.csv')
testdata.info()

testdata['Sex'] = testdata['Sex'].apply(lambda s: 1 if s == 'male' else 0)

X_test = testdata[['Sex', 'Age', 'Pclass', 'SibSp', 'Parch', 'Fare']]

with tf.Session(config=config) as sess:
    ckpt = tf.train.get_checkpoint_state('./saved_model')
    if ckpt and ckpt.model_checkpoint_path:
        saver.restore(sess, ckpt.model_checkpoint_path)

    predictions = np.argmax(sess.run(Y_pred, feed_dict={X: X_test}), 1)
    submission = pd.DataFrame(
        {
            "PassengerId": testdata["PassengerId"],
            "Survived": predictions
        }
    )
    submission.to_csv("titanic_sub.csv", index=False)

完整代码

titanic_model.py

import pandas as pd
from sklearn.model_selection import train_test_split
import numpy as np
import tensorflow as tf

data = pd.read_csv('./data/train.csv')
data.info()

########
# 一、数据读入及预处理
# 取用部分特征字段用来分类,并将缺失字段补0
data['Sex'] = data['Sex'].apply(lambda s: 1 if s == 'male' else 0)
data = data.fillna(0)
dataset_X = data[['Sex', 'Age', 'Pclass', 'SibSp', 'Parch', 'Fare']]
# dataset_X = dataset_X.as_martix()
# 高版本pandas没有as_matrix函数,采用np.array代替
dataset_X = np.array(dataset_X)
# 创建Deceased字段,取值为Survived字段取非
data['Deceased'] = data['Survived'].apply(lambda s: 1 - s)
dataset_Y = data[['Deceased', 'Survived']]
dataset_Y = np.array(dataset_Y)
# 使用sklearn中的train_test_split函数将标记数据进行切割。切分成数据集和测试集两部分。验证数据占20%
X_train, X_test, Y_train, Y_test = train_test_split(dataset_X, dataset_Y, test_size=0.2, random_state=42)
########

#######
# 二、构建计算图
# 1.使用placeholder声明输入占位符
X = tf.placeholder(tf.float32, shape=[None, 6])
Y = tf.placeholder(tf.float32, shape=[None, 2])
# 2.声明参数变量
weights = tf.Variable(tf.random_normal([6, 2]), name='weights')
bias = tf.Variable(tf.zeros([2]), name='bias')

saver = tf.train.Saver(max_to_keep=3)  # 在要存储的变量后定义saver,max_to_keep定义了需要保存的版本数量
# 3.构造向前传播计算图
Y_pred = tf.nn.softmax(tf.matmul(X, weights) + bias)  # matmul为乘法算子
# 4.声明代价函数
# 本例程采用交叉熵作为代价函数(cross entropy)
cross_entropy = -tf.reduce_sum(Y * tf.log(Y_pred + 1e-10), reduction_indices=1)
# 注:在计算log()函数时最好机上一个极小误差,使计算合法
# 批量样本的代价值为所有样本交叉熵的平均值
cost = tf.reduce_mean(cross_entropy)
# 5.加入优化算法
# 使用随机梯度算法SGD优化器来最小化代价,系统自动构建反向传播部分的计算图
train_op = tf.train.GradientDescentOptimizer(0.001).minimize(cost)
# 计算图声明完成
#######

#######
# 三、构建训练迭代过程
# 通过session接口完成
# 通过with语句将session作为上下文管理器进行操作,退出作用域自动释放资源。
# gpu模式,在出现显存不足时会报错。采用下两行代码对tf.session进行配置
config = tf.ConfigProto()
config.gpu_options.allow_growth = True

with tf.Session(config=config) as sess:
    # 初始化所有变量,必须最先执行!!!!
    tf.global_variables_initializer().run()
    # 以下为训练迭代。10轮。
    for epoch in range(10):
        total_loss = 0
        for i in range(len(X_train)):
            feed = {X: [X_train[i]], Y: [Y_train[i]]}
            # 通过session.run接口触发执行
            _, loss = sess.run([train_op, cost], feed_dict=feed)
            total_loss += loss
        print('Epoch: %04d, total loss = %.9f' % (epoch + 1, total_loss))
        saver.save(sess, './saved_model/my_model.ckpt', global_step=epoch)# 循环保存模型。名称为my_model.ckpt。后缀为epoch次数
    print('Training complete!')
    # save_path = saver.save(sess, "model_sess1.ckpt")# 保存模型
    pred = sess.run(Y_pred, feed_dict={X: X_test})
    correct = np.equal(np.argmax(pred, 1), np.argmax(Y_test, 1))
    numpy_accuracy = np.mean(correct.astype(np.float32))
    print("Accuracy on validation set (numpy): %.9f" % numpy_accuracy)
# 评估校验数据集中的准确率
#######

titanic_test.py

import pandas as pd
import numpy as np
import tensorflow as tf

#######
# 二、构建计算图
# 1.使用placeholder声明输入占位符
X = tf.placeholder(tf.float32, shape=[None, 6])
Y = tf.placeholder(tf.float32, shape=[None, 2])
# 2.声明参数变量
weights = tf.Variable(tf.random_normal([6, 2]), name='weights')
bias = tf.Variable(tf.zeros([2]), name='bias')

saver = tf.train.Saver()  # 在要存储的变量后定义saver
# 3.构造向前传播计算图
Y_pred = tf.nn.softmax(tf.matmul(X, weights) + bias)  # matmul为乘法算子
# 4.声明代价函数
# 本例程采用交叉熵作为代价函数(cross entropy)
cross_entropy = -tf.reduce_sum(Y * tf.log(Y_pred + 1e-10), reduction_indices=1)
# 注:在计算log()函数时最好机上一个极小误差,使计算合法
# 批量样本的代价值为所有样本交叉熵的平均值
cost = tf.reduce_mean(cross_entropy)
# 5.加入优化算法
# 使用随机梯度算法SGD优化器来最小化代价,系统自动构建反向传播部分的计算图
train_op = tf.train.GradientDescentOptimizer(0.001).minimize(cost)
# 计算图声明完成
#######

#######
# 四、进行预测
# 通过session接口完成
# 通过with语句将session作为上下文管理器进行操作,退出作用域自动释放资源。
# gpu模式,在出现显存不足时会报错。采用下两行代码对tf.session进行配置
config = tf.ConfigProto()
config.gpu_options.allow_growth = True
testdata = pd.read_csv('./data/test.csv')
testdata.info()

testdata['Sex'] = testdata['Sex'].apply(lambda s: 1 if s == 'male' else 0)

X_test = testdata[['Sex', 'Age', 'Pclass', 'SibSp', 'Parch', 'Fare']]

with tf.Session(config=config) as sess:
    ckpt = tf.train.get_checkpoint_state('./saved_model')
    if ckpt and ckpt.model_checkpoint_path:
        saver.restore(sess, ckpt.model_checkpoint_path)

    predictions = np.argmax(sess.run(Y_pred, feed_dict={X: X_test}), 1)
    submission = pd.DataFrame(
        {
            "PassengerId": testdata["PassengerId"],
            "Survived": predictions
        }
    )
    submission.to_csv("titanic_sub.csv", index=False)


继续你的创作。

数据集下载

  1. titanic数据集下载.

参考文章

  1. 《深度学习原理与TensorFlow实践》
  2. tensorflow显存不足报错
  3. TensorFlow中tf.train.Saver类说明
  4. python 报错 AttributeError DataFrame object has no attribute as_matrix
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值