如何在张量流中读取.mat文件格式?

时间:2017-10-23 13:19:29

标签: tensorflow

Tensorflow中的Reader中有三个版本。

  1. tf.TFRecordReader,用于阅读TFRecord文件
  2. tf.FixedLengthRecordReader,用于阅读二进制文件
  3. tf.TextLineReader,用于阅读CSV文件
  4. 但是我该如何阅读.mat文件格式?我应该使用哪个读卡器?有没有读者阅读.mat文件?

    描述 : 目前,我正在制作一个小型CNN模型,用于使用Street View Housing Number数据集对住宅编号进行分类。数据集使用.mat文件格式。它是一个大型数据集。如果我使用读取机制中的Tensorflow构建读取数据集将会很有帮助。但我应该使用哪个读者?

4 个答案:

答案 0 :(得分:2)

为了获得优化的解决方案,您应该阅读并将数据转换为支持的格式之一:

  1. 阅读.mat文件。我建议使用scipy.io来阅读.mat文件。
  2. 将其存储为支持的格式之一。 TensorFlow的推荐格式是TFRecords文件,其中包含tf.train.Example个协议缓冲区(包含Features字段)quoted from here
  3. 祝你好运!

答案 1 :(得分:0)

您所需要做的就是导入“ scipy.io”包以读取python中的mat文件。 loadmat将从此包中导入。

例如:

import scipy.io as sio
mat_contents = sio_loadmat('myMatFile.mat')

祝你好运!

答案 2 :(得分:0)

如果您不想使用TFRecords,这是使用tf.py_func获取通过.mat API导入的tf.data.Dataset文件的一种方法。

def read_mat(filepath):   
    def _read_mat(filepath):
        matfile = sio.loadmat(filepath)
        data0 = matfile['data0']
        data1 = matfile['data1']
        data2 = mat_contents['data2']
        shape0 = matfile['data0'].shape
        return data0, data1, data2, np.asarray(shape0)

    output = tf.py_func(_read_mat, [filepath], [tf.double, tf.uint16, tf.double, tf.int64])
    shape = output[3]
    data0 = tf.reshape(output[0], shape)
    data1 = tf.reshape(output[1], shape)
    data2 = tf.reshape(output[2], shape)
    return data0, data1, data2

dataset = tf.data.Dataset.list_files('*.mat')
dataset = dataset.map(read_mat, num_parallel_calls=16)
dataset = dataset.repeat(100)
dataset = dataset.batch(8)
dataset = dataset.prefetch(8)
iterator = dataset.make_initializable_iterator()
sess = tf.Session()
sess.run(iterator.initializer)
values = sess.run(iterator.get_next())

答案 3 :(得分:-1)

我认为在tensorflow模型中加载数据的更好方法可能是手动将.mat格式转换为numpy格式。

Numpy非常适合TensorFlow,您可以轻松找到其他可以帮助您的帖子。

检查How to load and convert .mat file into numpy 2D array?

希望它可以帮到你!