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是行