美文网首页Python数据操作
Python三维矩阵的归一化操作

Python三维矩阵的归一化操作

作者: chunleiml | 来源:发表于2017-11-14 16:30 被阅读57次

    在深度学习任务中,把数据丢给模型训练之前一般都要对数据进行归一化操作,操作的方法有很多,这里用常见的减均值除方差举例。
    在对三维矩阵的每层进行归一化操作之后,关键一步是要记着要对每层进行叠加操作,否则参加训练的数据内容还是未经归一化的数据。
    例如对一个z轴方向有20层,大小为256*256的三维矩阵imgs进行归一化

        for i , brain_slice in enumerate(imgs):
            brain_slice = (brain_slice - np.mean(brain_slice))/np.std(brain_slice)
            #下面的if...else很关键,如果没有这个叠加操作,你会发现for循环结束后imgs里面的数据还是未归一化的数据
            if i == 0:
                imgs = np.reshape(brain_slice, [1,brain_slice.shape[0],brain_slice.shape[1]])
            else:
                imgs = np.concatenate((imgs, np.reshape(brain_slice, [1,brain_slice.shape[0],brain_slice.shape[1]])), axis = 0)     
    

    此代码是在Keras框架中使用,因此数据第一个维度是z轴。
    还有一种更加简便的操作,但是这种操作要确定imgs的数据类型是否为float型,如果是int型要先转成float型。因为在进行归一化操作的时候,肯定会产生float型数据,如果imgs原始是int型,那归一化产生的数据也会转为int型,这样会大大降低归一化的准确性。

        #如果原始imgs是int型,那下面的第一句代码是很有必要的
        imgs = np.array(imgs, np.float32)
        for i in range(imgs.shape[0]):
            imgs[i,:,:] = (imgs[i,:,:] - np.mean(imgs[i,:,:]))/np.std(imgs[i,:,:])
    

    顺便也介绍一下数据类型的查看方式。举个例子,brain_label是一个三维矩阵,下图是它属性的查看方式。

    print.png

    result.png
    要注意区分dtype和type的不同。

    相关文章

      网友评论

        本文标题:Python三维矩阵的归一化操作

        本文链接:https://www.haomeiwen.com/subject/stjfvxtx.html