2.1 深度学习的实用层面

1. 训练集,验证集,测试集

  当数据量较小时,可以分别占60%, 20%, 20%,当数据集规模很大时,验证集和测试集所占比例可以很小。

2.偏差和方差

 2.1判断

  我们可以根据训练集误差,判断数据拟合情况,判断是否有偏差问题。之后根据验证集误差,判断方差是否过高。

 2.2 解决

  针对高偏差(欠拟合):使用更复杂网络,花费更多时间训练算法或者是用优化算法,(或者采用新架构)

  针对高方差(过拟合):采用更多数据,正则化,(新架构)

3.正则化

3.1 正则化预防过拟合的原因

  正则化参数λ变大时,W变小,Z变小,激活函数会相对呈线性,整个神经网络会计算离线性网络近的值(神经网络会变简单,所以避免了过拟合)。

3.2 正则化方法

  L2

  L1

  dropout

  在不便引入新的数据时将图片翻转或剪裁(数据扩增),

  early stopping。绘制验证集误差

4.梯度消失与梯度爆炸

 

 

5. 作业

  1. 初始化参数:不同的初始化参数导致不同结果

  将所有W初始化为0 ,这将导致"break symmetry", 例子中识别准确率50%

  所有参数随机初始化并将规模*10,导致梯度下降缓慢,迭代次数过多,识别准确率83%

  He初始化(推荐激活函数为relu的层使用),在随机初始化的规模设为sqrt(2./layers_dims[l-1]),识别准确率99%

  Xavier initialization :sqrt(1./layers_dims[l-1])  

  2.正则化

  2.1 L2正则化

  正向:$$J_{regularized} = \small \underbrace{-\frac{1}{m} \sum\limits_{i = 1}^{m} \large{(}\small y^{(i)}\log\left(a^{[L](i)}\right) + (1-y^{(i)})\log\left(1- a^{[L](i)}\right) \large{)} }_\text{cross-entropy cost} + \underbrace{\frac{1}{m} \frac{\lambda}{2} \sum\limits_l\sum\limits_k\sum\limits_j W_{k,j}^{[l]2} }_\text{L2 regularization cost} \tag{2}$$

  反向:$\frac{d}{dW} ( \frac{1}{2}\frac{\lambda}{m}  W^2) = \frac{\lambda}{m} W$

  2.2 dropout步骤:

  正向:1. 随机初始化D矩阵 

      2.将D转换为0/1矩阵

      3.将 $A^{[1]}$ 转换为 $A^{[1]} * D^{[1]}$

      4.将 $A^{[1]}$ 除以 `keep_prob`

  反向:1. dAl = dAl * Dl

      2. dAl = dAl / keep_prob

 3.梯度检测

  梯度检测的步骤:

  1.初始化:将梯度和参数化成向量

  2.针对每一个参数循环

     计算$J^{+}_i$

1.Set $\theta^{+}$ to `np.copy(parameters_values)`
2. Set $\theta^{+}_i$ to $\theta^{+}_i + \varepsilon$
3. Calculate $J^{+}_i$ using to `forward_propagation_n(x, y, vector_to_dictionary(`$\theta^{+}$ `))

    计算$J^{-}_i$

    计算梯度

  3.得到一个梯度序列,与原梯度对比

转载于:https://www.cnblogs.com/cs-zzc/p/11373172.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一段基于tensorflow2.1的lenet代码,可以进行手写数字识别: ``` import tensorflow as tf # 加载手写数字数据集 mnist = tf.keras.datasets.mnist (train_images, train_labels), (test_images, test_labels) = mnist.load_data() # 对数据进行预处理 train_images = train_images.reshape((60000, 28, 28, 1)) train_images = train_images / 255.0 test_images = test_images.reshape((10000, 28, 28, 1)) test_images = test_images / 255.0 # 定义Lenet模型 model = tf.keras.Sequential([ tf.keras.layers.Conv2D(6, (5, 5), activation='relu', input_shape=(28, 28, 1)), tf.keras.layers.MaxPooling2D((2, 2)), tf.keras.layers.Conv2D(16, (5, 5), activation='relu'), tf.keras.layers.MaxPooling2D((2, 2)), tf.keras.layers.Flatten(), tf.keras.layers.Dense(120, activation='relu'), tf.keras.layers.Dense(84, activation='relu'), tf.keras.layers.Dense(10, activation='softmax') ]) # 编译并训练模型 model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) model.fit(train_images, train_labels, epochs=5, validation_data=(test_images, test_labels)) # 对测试数据进行预测 test_loss, test_acc = model.evaluate(test_images, test_labels) print('Test accuracy:', test_acc) ``` 以上代码中,我们首先加载了手写数字数据集,然后对数据进行预处理。接着,我们定义了一个Lenet模型,其中包含两个卷积层和三个全连接层。最后,我们编译并训练了模型,最终对测试数据进行了预测并输出了准确率。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值