发新帖

【已学会】TF学习之数据预处理坑---【如何导入自己的数据...

[复制链接]
419 17

快来加入 TensorFlowers 大家庭!

您需要 登录 才可以下载或查看,没有帐号?加入社区

x
看的教学视频,用的都是TF自带的打包好的数据集,例如MNIST。模型跑起来容易,问题是我怎样能套用上我自己的数据呢(离散带标签的)?
(后面会附上数据)


A列是ID不用管,B列到E列是features,F列是lable。

我想用自己数据的训练一个简单的网络。这时候我突然发现一个很严重的问题!

我不会将自己的数据折腾到模型的input............

部分数据如下:

  1. 1062234        22        0        2877331        880204        0
  2. 639849        17        0        740628        210180        0
  3. 1260095        5        0        3332261        162849        0
  4. 817139        22        0        1129563        530200        0
  5. 817139        23        0        1129563        530200        0
  6. 382250        14        0        2140120        812540        0
  7. 1145855        16        0        2140120        812540        0
  8. 1084377        16        0        2140120        812540        1
  9. 1000597        27        0        3894644        462440        0
  10. 565847        9        0        1246944        129784        0
  11. 312024        16        0        1246944        129784        0
  12. 817139        23        0        4386081        530200        0
复制代码

有没有大神贴上一段代码,让我学习一下数据导入,不胜感激!!!

  • 在Zerone01的帮助下现已解决,通过按行读取,再在每行中取出你想要的位置的内容(给一个下标即可)。也发现了更好用数据处理库---pandas,但是不知道pandas读取后的数据是否能直接用于TF,稍后再试。


QQ图片20180427155116.png
user_activity_log.rar (981 Bytes, 下载次数: 29)
本楼点评(2) 收起
  • Tsingliu楼主用了套用一词, 我觉得这个就是多因子分析。
    统计学出身,感觉还是有点好处的
    2018-4-28 11:50 回复
  • M丶Sulayman回复 Tsingliu :嗯嗯,代码的思想还是有自己的独到之处的,还在努力学习中
    2018-4-28 11:52 回复

精彩评论17

M丶Sulayman  TF豆豆  发表于 2018-4-27 16:10:56 | 显示全部楼层
再没有活跃一点的大神么...在线等~
本楼点评(0) 收起
Zerone01  TF荚荚  发表于 2018-4-27 17:30:26 | 显示全部楼层
1. 先把excel文件复制一份,接下来对其副本进行操作。
2. 可把第一行的0-5删除,第一列id如果用不上也可删除,然后另存为csv文件,假设叫data.csv。
3. python3 代码, 这样便能得到两个列表,一个是特征值数据,一个是标签。
  1. def load_data(file):
  2.     fr = open(file, "r")
  3.     lines = fr.readlines()
  4.     ret_data = []
  5.     ret_label = []

  6.     for line in lines:
  7.         items = line.strip().split(",")
  8.         ret_label.append(int(items[-1]))
  9.         ret_data.append([int(items[i]) for i in range(0, len(items) - 1)])

  10.     return ret_data, ret_label

  11. if __name__ == '__main__':
  12.     data, labels = load_data('data.csv')
复制代码


4. 如果需要转为numpy数组格式就再使用一下语句:

  1. data = numpy.array(data)
  2. labels = numpy.array(lables)
复制代码
本楼点评(0) 收起
M丶Sulayman  TF豆豆  发表于 2018-4-27 17:36:19 | 显示全部楼层
Zerone01 发表于 2018-4-27 17:30
1. 先把excel文件复制一份,接下来对其副本进行操作。
2. 可把第一行的0-5删除,第一列id如果用不上也可删 ...

谢谢你的解答可能是我说明的不够清楚,我意思是关键是怎样将样本和它的标签放入模型中训练。因为TF自带的数据都是封装了的,看不到数据是如何导入模型里的。您能给出一个简单的例子么?你现在把样本和标签放在了2个文件中,那么训练和测试的时候怎样调用呢?谢谢~
本楼点评(0) 收起
Zerone01  TF荚荚  发表于 2018-4-27 18:13:36 | 显示全部楼层
M丶Sulayman 发表于 2018-4-27 17:36
谢谢你的解答可能是我说明的不够清楚,我意思是关键是怎样将样本和它的标签放入模型中训练 ...

推荐一下这门课程: https://www.tensorflowers.cn/t/204
  1. import numpy as np
  2. import tensorflow as tf


  3. def load_data(file):
  4.     fr = open(file, "r")
  5.     lines = fr.readlines()
  6.     ret_data = []
  7.     ret_label = []

  8.     for line in lines:
  9.         items = line.strip().split(",")
  10.         ret_label.append([int(items[-1])])
  11.         ret_data.append([int(items) for i in range(0, len(items) - 1)])

  12.     return np.array(ret_data), np.array(ret_label)

  13. if __name__ == '__main__':
  14.     # 加载数据
  15.     train_data, train_labels = load_data('train_data.csv')
  16.     test_data, test_labels = load_data('test_data.csv')
  17.     print(train_data.shape)
  18.     print(train_labels.shape)

  19.     feature_num = 5
  20.     x = tf.placeholder(tf.float32, shape=[None, feature_num], name='x')

  21.     y_true = tf.placeholder(tf.float32, shape=[None, 1], name='y_true')

  22.     w = tf.Variable(tf.random_normal([feature_num, 1], stddev=1))
  23.     y = tf.matmul(x, w)

  24.     # 损失函数
  25.     loss_mse = tf.reduce_mean(tf.square(y - y_true))
  26.    
  27.     # 梯度下降优化器
  28.     train_step = tf.train.GradientDescentOptimizer(learning_rate=0.001).minimize(loss_mse)

  29.     with tf.Session() as sess:
  30.         sess.run(tf.global_variables_initializer())

  31.         # 训练
  32.         sess.run(train_step, feed_dict={x: train_data, y_true: train_labels})

  33.         # 测试
  34.         y_pred = sess.run(y, feed_dict={x: test_data, y_true: test_labels})
  35.         
  36.         # TODO:通过比较 y_pred 和 test_labels 计算准确率....
复制代码
本楼点评(0) 收起
M丶Sulayman  TF豆豆  发表于 2018-4-27 18:17:32 | 显示全部楼层
Zerone01 发表于 2018-4-27 18:13
推荐一下这门课程: https://www.tensorflowers.cn/t/204

再次感谢,刚起步,可能自己有时候有点跳跃性思想,python基础知识有点薄弱我先学习学习,然后举一反三~
本楼点评(0) 收起
M丶Sulayman  TF豆豆  发表于 2018-4-27 22:20:22 | 显示全部楼层
Zerone01 发表于 2018-4-27 18:13
推荐一下这门课程: https://www.tensorflowers.cn/t/204

额,第十四行报错python int() argument must be a string, a bytes-like object or a number, not 'list'   我自己先看看能解决不
本楼点评(0) 收起
Zerone01  TF荚荚  发表于 2018-4-28 08:15:32 | 显示全部楼层
M丶Sulayman 发表于 2018-4-27 22:20
额,第十四行报错python int() argument must be a string, a bytes-like object or a number,  ...

在我电脑上能跑啊,你的csv文件删除了无关的数据吗?
我的csv文件前三行是这样的(前五列是特征值,最后一列是标签,英文逗号分隔):
  1. 1062234,22,0,2877331,880204,0
  2. 639849,17,0,740628,210180,0
  3. 1260095,5,0,3332261,162849,0
复制代码



本楼点评(0) 收起
M丶Sulayman  TF豆豆  发表于 2018-4-28 11:40:32 | 显示全部楼层
Zerone01 发表于 2018-4-28 08:15
在我电脑上能跑啊,你的csv文件删除了无关的数据吗?
我的csv文件前三行是这样的(前五列是特征值,最后 ...

额,我好像手动删除了一些数据试了好几次都没成功,我还在研究中
本楼点评(0) 收起
M丶Sulayman  TF豆豆  发表于 2018-4-28 14:22:18 | 显示全部楼层
=,=排版乱了,版主~快来拯救
本楼点评(0) 收起
Zerone01  TF荚荚  发表于 2018-4-28 14:23:09 | 显示全部楼层
M丶Sulayman 发表于 2018-4-28 11:40
额,我好像手动删除了一些数据试了好几次都没成功,我还在研究中
...

额,如果不介意的话可以把你的数据文件发一下(不需要包含全部数据)
本楼点评(0) 收起
M丶Sulayman  TF豆豆  发表于 2018-4-28 14:25:14 | 显示全部楼层
Zerone01 发表于 2018-4-28 14:23
额,如果不介意的话可以把你的数据文件发一下(不需要包含全部数据)

我也想发,他不让啊......数据倒没什么。你随便下个这种离散的,或者自己编一些也行,我再试试能传上来不
本楼点评(0) 收起
M丶Sulayman  TF豆豆  发表于 2018-4-28 14:28:32 | 显示全部楼层
Zerone01 发表于 2018-4-28 14:23
额,如果不介意的话可以把你的数据文件发一下(不需要包含全部数据)

传上来了,传上来了~
本楼点评(0) 收起
Zerone01  TF荚荚  发表于 2018-4-28 15:08:45 | 显示全部楼层
本帖最后由 Zerone01 于 2018-4-28 15:10 编辑

知道原因了!
https://stackoverflow.com/questions/17142088/python-2-7-and-3-3-2-why-int0-0-does-not-work?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa

在load_data()函数中,执行 items = line.strip().split(",") 这条语句之后,每一行的数据变成了一个列表,形如:
['1062234.0', '22.0', '0.0', '2877331.0', '880204.0', '0.0']

这些字符串中,有的字符串表示的数含有小数点,因此不能传入 int() 中将它们转为整型数,只能先传入到float(), 在将结果传入int()来转换为整型数,类似与这样:int(float('0.0'))


解决方法(二选一):
1. 用excel打开csv文件,全选所有数据,右键--->设置单元格格式,在分类一栏选择数值,然后将小数位数设置为0,保存文件。


2. 将load_data()函数中的这两句:
  1. ret_label.append([int(items[-1])])
  2. ret_data.append([int(items[i]) for i in range(0, len(items) - 1)])
复制代码
改成:
  1. ret_label.append([int(float(items[-1]))])
  2. ret_data.append([int(float(items[i])) for i in range(0, len(items) - 1)])
复制代码

另:
1.我是把出错信息“ValueError: invalid literal for int() with base 10: '0.0'” google了一下才知道的
2.数据文件的第一行可以删了




本楼点评(1) 收起
M丶Sulayman  TF豆豆  发表于 2018-4-28 15:15:39 | 显示全部楼层
Zerone01 发表于 2018-4-28 15:08
知道原因了!
https://stackoverflow.com/questions/17142088/python-2-7-and-3-3-2-why-int0-0-does-not-w ...

66666,谢谢给我这么多的支持,一个问题让我学到了好多东西
本楼点评(1) 收起
M丶Sulayman  TF豆豆  发表于 2018-4-28 16:50:20 | 显示全部楼层
M丶Sulayman 发表于 2018-4-28 15:15
66666,谢谢给我这么多的支持,一个问题让我学到了好多东西
...

我正在学习你的代码,又有个新问题了。我知道python中有个很好用的东西叫做推导式。本来后面才看的,但是你的代码中出现了,趁热打铁先学了。额...你能给我还原成普通的那种for循环么?我对比学习一下,有点懵。谢谢~
本楼点评(0) 收起
Zerone01  TF荚荚  发表于 2018-4-28 18:27:18 | 显示全部楼层
M丶Sulayman 发表于 2018-4-28 16:50
我正在学习你的代码,又有个新问题了。我知道python中有个很好用的东西叫做推导式。本来后 ...

以这段代码为例:

for line in lines:
    items = line.strip().split(",")
    print(items)
    ret_label.append([int(items[-1])])
    ret_data.append([int(items) for i in range(0, len(items) - 1)])

items是一个形如['1062234', '22', '0', '2877331', '880204', '0']的列表,它里面前五个元素是特征值,最后一个是标签。

为了将列表中前五个元素作为一个列表(表示一组数据)加入到ret_data列表中,可以使用如下for循环:

for line in lines:
    items = line.strip().split(",")
    print(items)
    ret_label.append([int(items[-1])])
    features = []
    for i in range(len(items) - 1):
        features.append(int(items[i]))
    ret_data.append(features)

列表推导式

本楼点评(0) 收起
M丶Sulayman  TF豆豆  发表于 2018-4-28 19:51:32 | 显示全部楼层
Zerone01 发表于 2018-4-28 18:27
[md]以这段代码为例:
```  python
for line in lines:

赞赞赞!!!~继续学习
本楼点评(0) 收起
您需要登录后才可以回帖 登录 | 加入社区

本版积分规则

快速回复 返回顶部 返回列表