tensrflow读取csv构造DNN

笔记笔记,给自己看的傻瓜式教学笔记

# matplotlib 用于绘图
import matplotlib as mpl
import matplotlib.pyplot as plt
# 处理数据的库
import numpy as np
import sklearn
import pandas as pd
# 系统库
import os
import sys
import time
# TensorFlow的库
from tensorflow import keras
'''python使用tensrflow读取csv文件训练深度学习DNN模型'''
import tensorflow as tf
import functools
import numpy as np
from sklearn.preprocessing import StandardScaler
from tensorflow import keras
from sklearn.model_selection import train_test_split
#tf.compat.v1.disable_eager_execution()

#首先要用tersonflow提取数据加载date.Dataset  才能被DNN所使用
'''从csv里面加载数据'''
train_file_path='C:/Users/70473/Desktop/tra.csv'
data=pd.read_csv(train_file_path) #通过read_csv方法读取文件 调用之后它的type为<class 'pandas.core.frame.DataFrame'>
#data_shape=data.shape
#s=data.head(5)  head方法查看数据  查看一下自己读取文件是否成功 要注意的是这里直接读取出来的文件 还不能被tensorflow使用 还需要进一步转换为<class 'tensorflow.python.data.ops.dataset_ops.BatchDataset'>
'''划分数据集和测试集'''
#运用train_test_split()划分数据集和测试集
#  划分出的训练数据集数据 ,划分出的测试数据集数据 = train_test_split(带划分的数据集合,test_size=分数划分的比例)
train, test = train_test_split(data, test_size=0.2)  #第一个是所要划分的样本特征集  test_size:样本占比,如果是整数的话就是样本的数量
train, val = train_test_split(train, test_size=0.2)
#print(train.head(5)) #会发现train_test_split()划分是随机的
#到这一步 在没有实现分割训练集 测试集情况下 所需要的训练集 测试集就画好了


'''dataframe格式转为BatchDataset'''
#将dataframe格式转为能被tensorflow识别的dataset格式
def df_to_dataset(dataframe, shuffle=True, batch_size=32):
    c_dataframe = dataframe.copy()  #把dataframe中的内容重新复制到一个新的dataframe中
    labels = c_dataframe.pop('name') #print(type(labels[0]))  <class 'str'>  #从c_data中提取标签一列
    ds = tf.data.Dataset.from_tensor_slices((dict(c_dataframe), labels.values))
    # tf.data.Dataset.from_tensor_slices  用于给 给定的 元组列表张量等特征进行切片。 为了完成特征feature 和 标签label的组合 构成完整的训练数据集合([feature_1, label_1],[feature_2, label_2],......)
    if shuffle:
        ds = ds.shuffle(buffer_size=len(dataframe))   #随机排列列表
    ds = ds.batch(batch_size)  #对于训练集从数组中每次获取一个bitch_size的数据
    return ds


#batch,在神经网络模型训练时,比如有1000个样本,把这些样本分为10批,就是10个batch。每个批(batch)的大小为100,就是batch size=100。每次模型训练,更新权重时,就拿一个batch的样本来更新权重
train_dataset = df_to_dataset(train, batch_size=12)      #随机抽6个  函数中定义的ca_var函数   随机抽取六个排列组合
val_dataset = df_to_dataset(val, shuffle=False, batch_size=12)
test_dataset = df_to_dataset(test, shuffle=False, batch_size=12)



"""   构建DENSE类型输入层神经模型  """
for feature_batch, label_batch in train_dataset.take(1):
    feature = list(feature_batch.keys())

feature_columns = []  #
# 遍历特征列表feature
for col in feature:#如果label不多的情况下 这里的feature也可以直接列一个数组 不用for循环遍历
    feature_columns.append(tf.feature_column.numeric_column(col))

#构造输入层
feature_layer = tf.keras.layers.DenseFeatures(feature_columns, dtype='int64')    #根据需要将原始数据转换为特征数据  输入层 将面向列的数据转换为单个tensor
#在模型的第一层,此面向列的数据应转换为单个 Tensor 。

#构造整个DNN网络
model = keras.models.Sequential([
    feature_layer, #输入层
    keras.layers.Dense(40, activation='selu'),
    keras.layers.Dense(30, activation='selu'),
    keras.layers.Dense(20, activation='selu'),
    keras.layers.Dense(1, activation='sigmoid')
])
model.compile(optimizer=keras.optimizers.SGD(0.01),  #优化器
             loss="binary_crossentropy",  #损失函数
             metrics=['accuracy']         #评价函数
             )
model.fit(train_dataset, validation_data=val_dataset,epochs=100)
#训练集的输入特征   标签    batch_size每一批小批量训练的大小 epochs迭代次数     validation_data = (测试集的输入特征,测试集的标签),validation_split = 从测试集中划分多少比例给训练集, validation_freq = 测试的epoch间隔数)
#Cast string to int64 is not supported  查看标签的类型是否发生改变
loss, accuracy = model.evaluate(test_dataset)
print(accuracy)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值