tensorflow 行转为列_使用Tensorflow将自己的数据分割成batch训练实例

学习神经网络的时候,网上的数据集已经分割成了batch,训练的时候直接使用batch.next()就可以获取batch,但是有的时候需要使用自己的数据集,然而自己的数据集不是batch形式,就需要将其转换为batch形式,本文将介绍一个将数据打包成batch的方法。

一、tf.slice_input_producer()

首先需要讲解两个函数,第一个函数是 :tf.slice_input_producer(),这个函数的作用是从输入的tensor_list按要求抽取一个tensor放入文件名队列,下面解释下各个参数:

?

tensor_list 这个就是输入,格式为tensor的列表;一般为[data, label],即由特征和标签组成的数据集

num_epochs 这个是你抽取batch的次数,如果没有给定值,那么将会抽取无数次batch(这会导致你训练过程停不下来),如果给定值,那么在到达次数之后就会报OutOfRange的错误

shuffle 是否随机打乱,如果为False,batch是按顺序抽取;如果为True,batch是随机抽取

seed 随机种子

capcity 队列容量的大小,为整数

name 名称

举个例子:我的data的shape为(4000,10),label的shape为(4000,2),运行下面这行代码

?

结果如图,可以看出返回值为一个包含两组数据的list,每个list的shape与输入的data和label的shape对应

二、tf.train.batch()& tf.train.shuffle_batch()

第二个函数为:tf.train.batch(),tf.train.shuffle_batch(),这个函数的作用为生成大小为batch_size的tensor,下面解释下各个参数:

?

[data,label] 输入的样本和标签

batch_size batch的大小

capcity 队列的容量

num_threads 线程数,使用多少个线程来控制整个队列

allow_smaller_final_batch 这个是当最后的几个样本不够组成一个batch的时候用的参数,如果为True则会重新组成一个batch

下面给出生成batch的函数,由上面两个函数组成:

?

还是同样的输入,batch_size设为2000,看下运行后的返回值的shape:

可以发现,返回是样本数目为2000的tensor,也就是达到了将自己的数据打包成batch的功能

三、batch的使用方法

生成batch只完成了一半,后面的使用方法也比较复杂,直接上一个完整的程序来讲解会方便理解一些:下面代码构建了一个单层感知机,对数据进行分类,主要看一下训练过程中如何使用生成好了的batch,具体细节都写在注释里面了。

?

总共训练的次数为(样本数目/batch_size)*num_epochs

四、 简单生成Batch的方法

最近发现了一种简单生生成batch的方法,实现简单,操作方便,就是时间复杂度可能高了一点,直接上代码。通过np.random.choice方法每次在范围[0, len(all_data))内抽取大小为size的索引。然后通过这部分索引构建batch。

?

以上这篇使用Tensorflow将自己的数据分割成batch训练实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/sinat_35821976/article/details/82668555

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是使用TensorFlow.NET训练自己的数据集的例程: 1. 准备数据集 首先,需要准备自己的数据集。数据集应该包括训练集和测试集两部分,每个部分应该包括输入数据和标签。 2. 安装TensorFlow.NET 可以在官网下载最新版本的TensorFlow.NET,并按照官方文档进安装。 3. 构建模型 使用TensorFlow.NET构建模型的方法与使用TensorFlow类似。可以使用Keras API或者直接调用TensorFlow.NET的API。 下面是一个使用Keras API构建模型的例子: ```csharp using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using TensorFlow; using Keras; using Keras.Layers; using Keras.Models; namespace TensorFlowNET.Examples { class Program { static void Main(string[] args) { var (x_train, y_train) = LoadData("train.csv"); var (x_test, y_test) = LoadData("test.csv"); var input = new Input(new TensorShape(28, 28)); var x = new Reshape(new int[] { 28 * 28 }).Apply(input); x = new Dense(128, activation: "relu").Apply(x); x = new Dense(10, activation: "softmax").Apply(x); var model = new Model(input, x); model.Compile(optimizer: "adam", loss: "categorical_crossentropy", metrics: new[] { "accuracy" }); model.Fit(x_train, y_train, batch_size: 128, epochs: 5, validation_split: 0.1); var score = model.Evaluate(x_test, y_test); Console.WriteLine($"Test loss: {score[0]}"); Console.WriteLine($"Test accuracy: {score[1]}"); } static (NDArray, NDArray) LoadData(string file) { // Load data from file return (x, y); } } } ``` 4. 训练模型 使用准备好的数据集和构建好的模型进训练。可以使用模型的`Fit`方法进批量训练。 ```csharp model.Fit(x_train, y_train, batch_size: 128, epochs: 5, validation_split: 0.1); ``` 5. 评估模型 在训练后,可以使用模型的`Evaluate`方法对模型进评估。 ```csharp var score = model.Evaluate(x_test, y_test); Console.WriteLine($"Test loss: {score[0]}"); Console.WriteLine($"Test accuracy: {score[1]}"); ``` 以上就是使用TensorFlow.NET训练自己的数据集的例程。希望对你有帮助!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值