当一个完整的数据集通过了神经网络一次并且返回了一次,这个过程称为一个 epoch。
在不能将数据一次性通过神经网络的时候,就需要将数据集分成几个 batch。
iterations是 batch 需要完成一个 epoch 的次数
训练集有1000个样本,batchsize=10,那么:
训练完整个样本集需要:
100次iteration,1次epoch。
具体的计算公式为:
one epoch = numbers of iterations = N = 训练样本的数量/batch_size
numpy.random.
choice
(a, size=None, replace=True, p=None)
参数意思分别 是从a 中以概率P,随机选择3个, p没有指定的时候相当于是一致的分布
我们简单的理解就是: 如果模块是被直接运行的,则代码块被运行,如果模块是被导入的,则代码块不被运行。
https://www.jianshu.com/p/d09778f4e055
在使用 keras 时候会出现总是占满 GPU 显存的情况,可以通过重设 backend 的 GPU 占用情况来进行调节
import tensorflow as tf
from keras.backend.tensorflow_backend
import set_session
config = tf.ConfigProto()
config.gpu_options.per_process_gpu_memory_fraction = 0.3
set_session(tf.Session(config=config))
https://www.cnblogs.com/q735613050/p/8227446.html
Keras 有两种类型的模型,序列模型(Sequential)和 函数式模(Model),函数式模型应用更为广泛,序列模型是函数式模型的一种特殊情况。函数式模型也叫通用模型。
序列模型是函数式模型的简略版(即序列模型是通用模型的一个子类),为最简单的线性、从头到尾的结构顺序,不分叉。即这种模型各层之间是依次顺序的线性关系,在第 kk 层和 k+1k+1 层之间可以加上各种元素来构造神经网络。这些元素可以通过一个列表来制定,然后作为参数传递给序列模型来生成相应的模型。
Sequential模型的基本组件:
1 add:添加层
序贯模型是多个网络层的线性堆叠,也就是“一条路走到黑”。
可以通过向 Sequential 模型传递一个 layer 的 list 来构造该模型:
from keras.models import Sequential
from keras.layers import Dense, Activation
model = Sequential([Dense(32, input_shape=(784,)),
Activation('relu'),
Dense(10),
Activation('softmax'),
])
也可以通过 .add()
方法一个个的将 layer 加入模型中:
model = Sequential()
model.add(Dense(32, input_shape=(784,)))
model.add(Activation('relu'))
model.add(Dense(10))
model.add(Activation('softmax'))
2 指定输入数据的 shape
模型需要知道输入数据的 shape,因此,Sequential 的第一层需要接受一个关于输入数据 shape 的参数,后面的各个层则可以自动的推导出中间数据的shape,因此不需要为每个层都指定这个参数。
3 编译
在训练模型之前,我们需要通过 compile 来对学习过程进行配置。
compile接收三个参数:
优化器 optimizer:该参数可指定为已预定义的优化器名,如 rmsprop、adagrad ,或一个Optimizer 类的对象,详情见优化器optimizers。
损失函数 loss:该参数为模型试图最小化的目标函数,它可为预定义的损失函数名,如 categorical_crossentropy、mse,也可以为一个自定义损失函数。详情见损失函数loss。
指标列表 metrics:对分类问题,我们一般将该列表设置为 metrics=['accuracy']。指标可以是一个预定义指标的名字,也可以是一个用户定制的函数。指标函数应该返回单个张量,或一个完成 metric_name - > metric_value映射的字典。