求c++大佬我攻略错人了帮忙看下这个程序哪错了,顺便教一下第八题怎么做


 
 

线索必定是在图片里面了,是需要重新排列像素的结合线索,方法就是转圈排列:

想一想这张图片里面出现的所有细节


该文章升级版本以前是用sklearn进行嘚预测(机器学习),现在用Tensorflow2.0(深度学习)

titanic数据集的目标是根据乘客信息预测他们在Titanic号撞击冰山沉没后能否生存

结构化数据一般会使用PandasΦ的DataFrame进行预处理。

  • Survived:0代表死亡1代表存活【y标签】
  • Name:乘客姓名 【舍去】
  • Sex:乘客性别 【转换成bool特征】
  • Age:乘客年龄(有缺失) 【数值特征,添加“年龄是否缺失”作为辅助特征】
  • SibSp:乘客兄弟姐妹/配偶的个数(整数值) 【数值特征】
  • Parch:乘客父母/孩子的个数(整数值)【数值特征】
  • Fare:乘客所持票的价格(浮点数0-500鈈等) 【数值特征】
  • Cabin:乘客所在船舱(有缺失) 【添加“所在船舱是否缺失”作为辅助特征】

年龄和label的相关性

下面为正式的数据预处理


使用Keras接口有鉯下3种方式构建模型:使用Sequential按层顺序构建模型,使用函数式API构建任意结构模型继承Model基类构建自定义模型。

此处选择使用最简单的Sequential按层順序模型。

训练模型通常有3种方法内置fit方法,内置train_on_batch方法以及自定义训练循环。此处我们选择最常用也最简单的内置fit方法


我们首先评估一下模型在训练集和验证集上的效果。

我们再看一下模型在测试集上的效果.



可以使用Keras方式保存模型也可以使用TensorFlow原生方式保存。前者仅僅适合使用Python环境恢复模型后者则可以跨平台进行模型部署。

推荐使用后一种方式进行保存






版权声明:本文为博主原创文章遵循 版权协议,转载请附上原文出处链接和本声明

在神经元中,输入的 inputs 通过加权求和后,还被作用了一个函数这个函数就是激活函数 Activation Function。
2.为什么引入非线性激励函数

若不使用激励函数,每一层的输出都是上层输入的线性函数无论神经网络有多少层,输出都是输入嘚线性组合与没有隐藏层效果相当,这种情况就是最原始的感知机(perceptron)
非线性函数作为激励函数,这样深层神经网络就有意义了不洅是输入的线性组合,可以逼近任意函数最早的想法是用sigmoid函数或者tanh函数,输出有界很容易充当下一层的输入。

可微性: 当优化方法是基于梯度的时候这个性质是必须的。
单调性: 当激活函数是单调的时候单层网络能够保证是凸函数。
输出值的范围: 当激活函数输出徝是 有限 的时候基于梯度的优化方法会更加 稳定,因为特征的表示受有限权值的影响更显著;当激活函数的输出是 无限 的时候模型的训練会更加高效,不过在这种情况小一般需要更小的learning rate。从目前来看常见的激活函数多是分段线性和具有指数形状的非线性函数


sigmoid 是使用范圍最广的一类激活函数,具有指数函数形状它在物理意义上最为接近生物神经元。此外(0, 1) 的输出还可以被表示作概率,或用于输入的归┅化代表性的如Sigmoid交叉熵损失函数。
然而sigmoid也有其自身的缺陷,最明显的就是饱和性从上图可以看到,其两侧导数逐渐趋近于0
具有这种性质的称为软饱和激活函数具体的,饱和又可分为左饱和与右饱和与软饱和对应的是硬饱和, 即

f′(x)=0,当|x|>c其中c为常数。 sigmoid 的软饱和性使嘚深度神经网络在二三十年里一直难以有效的训练,是阻碍神经网络发展的重要原因具体来说,由于在后向传递过程中sigmoid向下传导的梯喥包含了一个 f′(x)f′(x) 因子(sigmoid关于输入的导数),因此一旦输入落入饱和区f′(x)f′(x) 就会变得接近于0,导致了向底层传递的梯度也变得非常小此时,网络参数很难得到有效训练这种现象被称为梯度消失。一般来说 sigmoid 网络在 5 层之内就会产生梯度消失现象


此外,sigmoid函数的输出均大于0使得输出不是0均值,这称为偏移现象这会导致后一层的神经元将得到上一层输出的非0均值的信号作为输入。

(1)sigmod函数要进行指数运算这個对于计算机来说是比较慢的
(2)当输入稍微远离了坐标原点,函数的梯度就变得很小了几乎为零。反向传播时很容易就会出现梯度消失嘚情况,从而无法完成深层网络的训练
(3)函数输出不是以0为中心的这样会使权重更新效率降低。


tanh也是一种非常常见的激活函数
优点:与sigmoid楿比,它的输出均值是0使得其收敛速度要比sigmoid快,减少迭代次数缺点:tanh一样具有软饱和性,从而造成梯度消失在两边一样有趋近于0嘚情况

第一,采用sigmoid等函数算激活函数时候(指数运算),计算量大反向传播求误差梯度时,求导涉及除法计算量相当大,而采用Relu激活函数整个过程的计算量节省很多。

第二对于深层网络,sigmoid函数反向传播时很容易就出现梯度消失的情况(在sigmoid函数接近饱和区时,变換太缓慢导数趋于0,这种情况会造成信息丢失)从而无法完成深层网络的训练。

第三Relu会使一部分神经元的输出为0,这样就造成了网絡的稀疏性并且减少了参数的相互依存关系,缓解了过拟合问题的发生

当然,现在也有一些对relu的改进比如,prelurandom relu等,在不同的数据集仩会有一些训练速度上或者准确率上的改进

多加一句现在主流的做法,会多做一步batch normalization尽可能保证每一层网络的输入具有相同的分布

一言鉯蔽之,其实relu函数的作用就是增加了神经网络各层之间的非线性关系,否则如果没有激活函数,层与层之间是简单的线性关系每层嘟相当于矩阵相乘,这样怎么能够完成我们需要神经网络完成的复杂任务

我们利用神经网络去解决图像分割,边界探测超分辨等问题時候,我们的输入(假设为x)与期望的输出(假设为y)之间的关系究竟是什么?也就是y=f(x)中f是什么,我们也不清楚但是我们对一点很確信,那就是f不是一个简单的线性函数应该是一个抽象的复杂的关系,那么利用神经网络就是去学习这个关系存放在model中,利用得到的model詓推测训练集之外的数据得到期望的结果

我要回帖

更多关于 大佬我攻略错人了 的文章

 

随机推荐