赞
踩
学习tensorflow和深度学习的时候,一些概念总是不清不楚
在keras中,数据是以张量的形式表示的,张量的形状称之为shape,即每一阶的个数,表示从最外层向量逐步到达最底层向量的降维解包过程。用tuple(元组)表示。
比如,一个一阶的张量[1,2,3]的shape是(3,);一个二阶的张量[[1,2,3],[4,5,6]]的shape是(2,3);一个三阶的张量[[[1],[2],[3]],[[4],[5],[6]]]的shape是(2,3,1)。
input_shape就是指输入张量的shape。
# as first layer in a Sequential model
model = Sequential()
model.add(Reshape((3, 4), input_shape=(12,)))
# now: model.output_shape == (None, 3, 4)
# note: `None` is the batch dimension
# as intermediate layer in a Sequential model
model.add(Reshape((6, 2)))
# now: model.output_shape == (None, 6, 2)
# also supports shape inference using `-1` as dimension
model.add(Reshape((-1, 2, 2)))
# now: model.output_shape == (None, 3, 2, 2)
例如,考虑一个含有32个样本的batch,每个样本都是10个向量组成的序列,每个向量长为16,则其输入维度为(32,10,16),其不包含batch大小的input_shape为(10,16)
input_dim输入的尺寸,或者维度
input_dim = input_shape(input_dim,)
input_dim, input_length = input_shape(input_length,input_dim)
例如,input_dim=784,说明输入是一个784维的向量,这相当于一个一阶的张量,它的shape就是(784,)。因此,input_shape=(784,)。
Batch Size定义:一次训练所选取的样本数。
Batch Size的大小影响模型的优化程度和速度。同时其直接影响到GPU内存的使用情况,假如你GPU内存不大,该数值最好设置小一点。
Batch Size从小到大的变化对网络影响
1、没有Batch Size,梯度准确,只适用于小样本数据库
2、Batch Size=1,梯度变来变去,非常不准确,网络很难收敛。
3、Batch Size增大,梯度变准确,
4、Batch Size增大,梯度已经非常准确,再增加Batch Size也没有用
注意:Batch Size增大了,要到达相同的准确度,必须要增大epoch。
Batch_Size的取值:
全批次(蓝色)
如果数据集比较小,我们就采用全数据集。全数据集确定的方向能够更好的代表样本总体,从而更准确的朝向极值所在的方向。
注:对于大的数据集,我们不能使用全批次,因为会得到更差的结果。
迷你批次(绿色)
选择一个适中的Batch_Size值。就是说我们选定一个batch的大小后,将会以batch的大小将数据输入深度学习的网络中,然后计算这个batch的所有样本的平均损失,即代价函数是所有样本的平均。
随机(Batch_Size等于1的情况)(红色)
每次修正方向以各自样本的梯度方向修正,横冲直撞各自为政,难以达到收敛。
在深度学习中,一般采用SGD训练,即每次训练在训练集中取batchsize个样本训练
中文翻译为时期。
一个时期=所有训练样本的一个正向传递和一个反向传递。
举个例子:
有一个2000个训练样本的数据集。将2000个样本分成大小为500的batch,那么完成一个epoch需要4个iteration。
dense是kereas里的全连层函数
# as first layer in a sequential model:
model = Sequential()
model.add(Dense(32, input_shape=(16,))) # Dense的第一个参数 units 是输出空间的维度
# now the model will take as input arrays of shape (*, 16)
# and output arrays of shape (*, 32)
# after the first layer, you don't need to specify
# the size of the input anymore:
model.add(Dense(32))
关于kereas、TensorFlow里的input_shape、shape的数据维度损失函数的定义方法:https://blog.csdn.net/yangdashi888/article/details/80452156
如何理解keras中的shape/input_shape:https://blog.csdn.net/x_ym/article/details/77728732
神经网络中Batch Size的理解:https://blog.csdn.net/qq_34886403/article/details/82558399
神经网络中Epoch、Iteration、Batchsize相关理解和说明:https://microstrong.blog.csdn.net/article/details/78597738?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.no_search_link&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.no_search_link
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。