Tensorflow2数据处理

数据处理

基于keras

个人感觉tensorflow2更多重点放在了高层API上,尤其是keras。官方例子更多的放在了keras上,下面我们将使用通过介绍两种简单的数据处理方式以配个keras训练。实际上两种方式对应了keras额sequential和models方式。

下面的例子和官网一样使用心脏病数据集分类。这里使用离线的方式训练,假设你已经下载了需要的文件

数据处理方式一(对应keras Sequential方式)

import tensorflow as tf 
import pandas as pd 
csv_file = 'heart.csv'
datas = pd.read_csv(csv_file)
# 因为有一列数据thal不是数值类型,需要转换这列为数值类型
datas['thal'] = pd.Categorical(datas['thal'])
datas['thal'] = datas.thal.cat.codes
# 创建数据集
train_x,train_y = datas,datas.pop('target')
dataset = tf.data.Dataset.from_tensor_slices((train_x.values,train_y.values))
train_dataset = dataset.shuffle(buffer_size=len(datas)).batch(1)
# 创建模型
model = tf.keras.Sequential([
    tf.keras.layers.Dense(10,activation='relu'),
    tf.keras.layers.Dense(1,activation='sigmoid')
])
model.compile(optimizer='adam',loss='binary_crossentropy',metrics=['accuracy'])
model.fit(train_dataset,epochs=10)

训练输出:

303/303 [==============================] - 0s 2ms/step - loss: 0.6113 - accuracy: 0.8086

使用Sequential方式传入的训练数据是(numpy,numpy)类型的数据。
常规的模型创建方式,通过一个个layer搭建神经网络然后输入数据进去计算结果。

方式2(models方式)

使用此方式传入的数据为dict{feature_name:feature_values}

import tensorflow as tf
import pandas as pd 
csv_file = 'heart.csv'
datas = pd.read_csv(csv_file)
# 因为有一列数据thal不是数值类型,需要转换这列为数值类型
datas['thal'] = pd.Categorical(datas['thal'])
datas['thal'] = datas.thal.cat.codes
train_x,train_y = datas,datas.pop('target')
# feature1:Input(),feature2:Input()
inputs = {key:tf.keras.layers.Input(shape=(),name=key) for key in datas.keys()}
x = tf.stack(list(inputs.values()),axis=-1)
x = tf.keras.layers.Dense(10,activation='relu')(x)
output = tf.keras.layers.Dense(1,activation='sigmoid')(x)
model = tf.keras.Model(inputs=inputs,outputs=output)
dict_dataset = tf.data.Dataset.from_tensor_slices((train_x.to_dict('list'),train_y.values)).batch(16)
model.compile(optimizer='adam',loss='binary_crossentropy',metrics=['accuracy'])
model.fit(dict_dataset,epochs=20)

结果如下:

19/19 [==============================] - 0s 3ms/step - loss: 2.3420 - accuracy: 0.6271

结构如下:
{feature1:Input(2),'feature2':Input(2)}..-->[input[1],input[2]]-->dense([input[1],input[2])-->output(上层model(x))通过输入和输出获得模型,然后调用模型训练。

train_x.to_dict('list')将dataframe转换为map,数据结构为{‘feature_name’;feature_values},其中feature_values为np.array。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值