python基础B

import  sys

print(sys.path)

python可引用模块路径

 

 

 

os.getcwd()  当前工作目录

 

 

 

\s是指空白,包括空格、换行、tab缩进等所有的空白,而\S刚好相反

[\s\S]*   是完全通配的意思,就表示所有的字符,完全的,一字不漏的。

 

 

 

 

pandas读取csv文件提示不存在是什么原因?

一般情况是数据文件没有在当前路径,那么它是无法读取数据的。另外,如果路径名包含中文它也是无法读取的。

 

(1)可以选择:

 

import os

 

os.getcwd()

 

获得当前的工作路径,把你的数据文件放在此路径上就可以了,就可以直接使用pd.read_csv("./_.csv")

 

(2) 可以选择:

 

使用os.chdir(path),path是你的那个数据文件路径

 

(3)可以选择:

 

不更改路径,直接调用df=pd.read_csv(U"文件存储的盘(如C盘) :/文件夹/文件名。csv"),比如在C盘的Python文件夹的stock data 下:da = pd.read_csv(U"C:/Python2.7/stock data/托脸600.csv")

 

如果是在ubuntu 系统下可以:data = pd.read_csv(U"/home/闪电lai/Tinic/train")

 

 

 

打乱顺序

 

 

 

只有在数据很庞大的时候(在机器学习中,几乎任何时候都是),我们才需要使用 epochs,batch size,迭代这些术语,

 

在这种情况下,一次性将数据输入计算机是不可能的。因此,为了解决这个问题,我们需要把数据分成小块,一块一块的传递给计算机,在每一步的末端更新神经网络的权重,拟合给定的数据。

 

EPOCHS

 

当一个完整的数据集通过了神经网络一次并且返回了一次,这个过程称为一个 epoch。

然而,当一个 epoch 对于计算机而言太庞大的时候,就需要把它分成多个小块。

为什么要使用多于一个 epoch?我知道这刚开始听起来会很奇怪,在神经网络中传递完整的数据集一次是不够的,而且我们需要将完整的数据集在同样的神经网络中传递多次。

但是请记住,我们使用的是有限的数据集,并且我们使用一个迭代过程即梯度下降,优化学习过程和图示。因此仅仅更新权重一次或者说使用一个 epoch 是不够的。

随着 epoch 数量增加,神经网络中的权重的更新次数也增加,曲线从欠拟合变得过拟合。

 

那么,几个 epoch 才是合适的呢?不幸的是,这个问题并没有正确的答案。对于不同的数据集,答案是不一样的。但是数据的多样性会影响合适的 epoch 的数量。比如,只有黑色的猫的数据集,以及有各种颜色的猫的数据集。

 

BATCH SIZE

一个 batch 中的样本总数。记住:batch size 和 number of batches 是不同的。

BATCH 是什么?在不能将数据一次性通过神经网络的时候,就需要将数据集分成几个 batch。

正如将这篇文章分成几个部分,如介绍、梯度下降、Epoch、Batch size 和迭代,从而使文章更容易阅读和理解。

迭代

理解迭代,只需要知道乘法表或者一个计算器就可以了。迭代是 batch 需要完成一个 epoch 的次数。记住:在一个 epoch 中,batch 数和迭代数是相等的。

比如对于一个有 2000 个训练样本的数据集。将 2000 个样本分成大小为 500 的 batch,那么完成一个 epoch 需要 4 个 iteration。

 

 

 

 

 

PIL中的Image和numpy中的数组array相互转换

 

1. PIL image转换成array

 

     img = np.asarray(image)

需要注意的是,如果出现read-only错误,并不是转换的错误,一般是你读取的图片的时候,默认选择的是"r","rb"模式有关。

 

修正的办法: 手动修改图片的读取状态

 

  img.flags.writeable = True  # 将数组改为读写模式

 

2. array转换成image

 

Image.fromarray(np.uint8(img))

 

 

 

 

 

 

 

 

repeat是属于ndarray对象的方法,使用它可以通过两个管道:

(1)numpy.repeat(a,repeats,axis=None);

(2)object(ndarray).repeat(repeats,axis=None):理解了第一种方法就可以轻松知道第二种方法了。

参数的意义:axis=None,时候就会flatten当前矩阵,实际上就是变成了一个行向量

axis=0,沿着y轴复制,实际上增加了行数

axis=1,沿着x轴复制,实际上增加列数

repeats可以为一个数,也可以为一个矩阵,具体区别我们从以下实例中就会发现以下各个实例都是使用了矩阵c:

 

 

 

 

 

 

 

卷积层输出大小计算

 

 

假设

输入数据维度为W*W

Filter大小 F×F

步长 S

padding的像素数 P

可以得出

 

N = (W − F + 2P )/S+1

 

输出大小为 N×N

##################################################################################################################################

卷积后图片输出大小几个数

 

W:图像宽,H:图像高,D:图像深度(通道数)

 

F:卷积核宽高,N:卷积核(过滤器)个数

 

S:步长,P:用零填充个数

 

卷积后输出图像大小:

 

                                    Width=(W-F+2P)/S+1

 

                                    Height=(H-F+2P)/S+1

 

卷积后输出图像深度:

 

                                    N=D

 

输出图像大小:             (width,height,N)

 

weight个数:       

 

                                    F*F*D*N

 

bias个数:

 

                                    N

 

总结:卷积输出大小=[(输入大小-卷积核(过滤器)大小+2*P)/步长]+1

 

通用的卷积时padding 的选择

 

如卷积核宽高为3时 padding 选择1

如卷积核宽高为5时 padding 选择2

如卷积核宽高为7时 padding 选择3

 

 

池化后图片输出大小及个数

 

W:图像宽,H:图像高,D:图像深度(通道数)

 

F:卷积核宽高,S:步长

 

池化后输出图像大小:

 

                                   W=(W-F)/S+1

 

                                   H=(H-F)/S+1

 

池化后输出图像深度:    

 

                                   N=D

 

总结:池化输出大小=[(输入大小-卷积核(过滤器)大小)/步长]+1

 

 

 

 

 

一维卷积

 

 

 

损失(目标函数)函数(mse  hinge )和优化器(sgd  RMSprop  Adam)  编译必需

metrics 性能评估  不必须

 

 

矩阵变图片

——————————————————————————————————

 

 

 

 

 

a=np.zeros((2,3))   #中间两个小括号

np.ones((1,2))/np.full((2,2),8)/np.eye(3)

np.empty((2,3,4))/

 

 

 

 

type(a)

a.shape

a.dtype

 

 

 

 

b=a[0:2,2:4].copy()

b[0,0]=124

 

 

 

 

 

np.add(x,y)

np.subtract(x,y)

np.multiply(x,y)

np.divide(x,y)   #逐元素相除

np.sqrt(x)v.dot(w)/np.dot(v,w)  #求向量内积

(np.matmul)x.T   #转置

 

 

 





axis=0是列,1是行