【问题标题】:How to read .mat file format in tensorflow?如何在 tensorflow 中读取 .mat 文件格式?
【发布时间】:2019-03-23 04:02:16
【问题描述】:

Tensorflow 中的 Reader 共有三个构建版本。

  1. tf.TFRecordReader,用于读取TFRecord文件
  2. tf.FixedLengthRecordReader,用于读取二进制文件
  3. tf.TextLineReader,用于读取CSV文件

但我应该如何阅读 .mat 文件格式?我应该使用哪个阅读器?有没有读.mat 文件的阅读器?

说明: 目前,我正在制作一个小型 CNN 模型,用于使用 Street View Housing Number 数据集对房屋号码进行分类。数据集使用 .mat 文件格式。它是一个大型数据集。如果我使用 Tensorflow 内置读取机制读取数据集,将会很有帮助。但是我应该使用哪个阅读器?

【问题讨论】:

    标签: tensorflow


    【解决方案1】:

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

    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())
    

    【讨论】:

    • 对于 Tensorflow v2 tf.py_func 可以换成 tf.numpy_function
    【解决方案2】:

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

    1. 读取.mat 文件。我建议使用scipy.io 来读取.mat 文件。
    2. 以支持的格式之一存储它。 TensorFlow 的推荐格式是 TFRecords 文件,其中包含 tf.train.Example 协议缓冲区(其中包含 Features 作为字段)quoted from here

    祝你好运!

    【讨论】:

    【解决方案3】:

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

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

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

    希望对你有帮助!

    【讨论】:

      【解决方案4】:

      您只需要导入“scipy.io”包即可在 python 中读取 mat 文件。 loadmat 将从这个包中导入。

      例如:

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

      祝你好运!

      【讨论】:

        猜你喜欢
        • 2020-10-25
        • 2016-02-04
        • 1970-01-01
        • 2018-07-04
        • 2020-11-03
        • 1970-01-01
        相关资源
        最近更新 更多