深度学习——一些概念的理解

介绍

学习tensorflow和深度学习的时候,一些概念总是不清不楚

input_shape

在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_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

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个样本训练

epoch

中文翻译为时期。
一个时期=所有训练样本的一个正向传递和一个反向传递。

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

Dense(稠密)

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weightOneMillion

感谢看官们的供粮~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值