在深度学习项目中遇到的一些坑

本文列举了在深度学习项目中可能遇到的问题,包括环境配置(如Anaconda、TensorFlow与Python版本兼容性)、安装TensorFlow的技巧、激活函数的选择(如ReLU、Leaky ReLU、ReLU的变种)以及优化器的使用(如SGD、Adam等)。还提到了激活函数的作用、损失函数的种类以及如何解决梯度消失问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在深度学习中遇到的一些坑
1、Anaconda3,for windows,64bit(tensorflow在windows下只支持python 3.5以上、amd64)

2、TensorFlow 不支持python 3.7  需要将python降级3.6(目前TensorFlow最新版本已经支持python3.7)
2.1、可以在装一个python3.6,在pycharm中选择3.6
2.2、也可以这样
    安装Anaconda->配置环境变量->Anaconda prompt->创建自己的虚拟环境
注意:如果要使用Spyder导入tensorflow,则需要对Anaconda默认python版本和所有计算包进行降级:

conda install python=3.5.2
建立名为tensorflow的conda计算环境(一定要是python3.5.2,py3.5.1与py3.6安装会报出找不到tensorflow资源的错误)

conda create -n tensorflow python=3.5.2
激活tensorflow环境

activate tensorflow
输入python --version,查看是否切换到python3.5 工作环境

2.3、 Anaconda中安装并测试tensorflow
pip install --ignore-installed --upgrade https://storage.googleapis.com/tensorflow/win/cpu/tensorflow-0.12.0rc0-cp35-cp35m-win_amd64.whl

安装Anaconda总结:
# 创建一个名为python34的环境,指定Python版本是3.4(不用管是3.4.x,conda会为我们自动寻找3.4.x中的最新版本)
 
conda create --name python34 python=3.4
 
# 安装好后,使用activate激活某个环境
 
activate python34 # for Windows
 
source activate python34 # for Linux & Mac
 
# 激活后,会发现terminal输入的地方多了python34的字样,实际上,此时系统做的事情就是把默认2.7环境从PATH中去除,再把3.4对应的命令加入PATH
 
# 此时,再次输入
 
python --version
 
# 可以得到`Python 3.4.5 :: Anaconda 4.1.1 (64-bit)`,即系统已经切换到了3.4的环境
 
# 如果想返回默认的python 2.7环境,运行
 
deactivate python34 # for Windows
source deactivate python34 # for Linux & Mac
# 删除一个已有的环境
 
conda remove --name python34 --all

PyCharm也能很方便的和anaconda的虚拟环境结合

在Setting => Project => Project Interpreter 里面修改 Project Interpreter , 点击齿轮标志再点击Add Local为你某个环境的python.exe解释器就行了
比如你要在learn环境中编写程序, 那么就修改为C:\Users\Administrator\AppData\Local\conda\conda\envs\learn, 可以看到这时候下面的依赖包也变成了learn环境中的包了.接下来我们就可以在pycharm中愉快的编码了
       

3、pip 安装TensorFlow 缓慢
        pip install tensorflow -i https://pypi.tuna.tsinghua.edu.cn/simple


4、pip安装tensorflow:
    报错FileNotFoundError: [WinError 2] 系统找不到指定的文件。
    import sys
    import keras as K
    import tensorflow as tf也会报错
    解决办法
        在python\Lib中找到subprocess.py脚本,修改class Popen(object)__init__中的参数,将对应行加上shell=true 参数。

5、pandas
    # 显示所有列
    pd.set_option('display.max_columns', None)
    # 显示所有行
    pd.set_option('display.max_rows', None)
    # 设置value的显示长度为100,默认为50
    pd.set_option('max_colwidth', 100)

6、框架中一些参数解释
   拆分数据集
   train_test_split: 分测试集和训练集。
   初始化方法
   initializers.glorot_uniform(seed=1):
  
        不同的层可能使用不同的关键字来传递初始化方法,一般来说指定初始化方法的关键字是kernel_initializer 和 bias_initializer,例如:
            model.add(Dense(64, kernel_initializer='random_uniform',bias_initializer='zeros'))
        一个初始化器可以由字符串指定(必须是下面的预定义初始化器之一),或一个callable的函数,例如
            from keras import initializers
            model.add(Dense(64, kernel_initializer=initializers.random_normal(stddev=0.01)))
            model.add(Dense(64, kernel_initializer='random_normal'))
        Initializer
        Initializer是所有初始化方法的父类,不能直接使用,如果想要定义自己的初始化方法,请继承此类。

线性模型在处理非线性问题时往往手足无措,这时我们需要引入激活函数来解决线性不可分问题。激活函数(Activation function),又名激励函数,往往存在于神经网络的输入层和输出层之间,作用是给神经网络中增加一些非线性因素,使得神经网络能够解决更加复杂的问题,同时也增强了神经网络的表达能力和学习能力。

常见的激活函数 sigmoid
    Sigmoid函数是单调增函数,输出范围在[0,1]之间,且越是负向增大,越接近于0,逼近速度越来越慢;越是正向增大,越接近于1,逼近速度也是越来越慢;因为 Sigmoid函数求导比较容易,可解释性也很强,所以在历史上被广泛的使用。
    与此同时,Sigmoid函数也有两个很大的缺点:首先是Sigmoid函数会造成梯度消失问题,从图像中我们也可以得知,当输入特别大或是特别小时,神经元的梯度几乎接近于0,这就导致神经网络不收敛,模型的参数不会更新,训练过程将变得非常困难。另一方面,Sigmoid函数的输出不是以0为均值的,导致传入下一层神经网络的输入是非0的。这就导致一个后果:若Sigmoid函数的输出全部为正数,那么传入下一层神经网络的值永远大于0,这时参数无论怎么更新梯度都为正。正是基于上述的缺点,Sigmoid函数近年来的使用频率也在渐渐减弱。
Tanh函数又名双曲正切激活函数,是Sigmoid函数的变形
    tanh激活函数与Sigmoid函数不同的是,函数的输出范围在[-1,1]之间,且Tanh函数的输出是以为0均值的,这就一定程度上解决了上述Sigmoid函数的第二个缺点,所以其在实际应用中的效果要好于Sigmoid函数。但当输入特别大或是特别小时,仍然存在梯度消失的问题。
修正线性单元ReLU
    ReLU激活函数又名修正线性单元,是目前深层神经网络中越来越受欢迎的一种激活函数,其数学表达式为:f(x) = max(0,x),
    从ReLU的函数图像我们可以发现,函数原点左侧的部分,输出值为0,斜率为0;函数原点右侧是斜率为1的直线,且输出值就是输入值。相比于上述的Sigmoid和tanh两种激活函数,ReLU激活函数完美的解决了梯度消失的问题,因为它的线性的、非饱和的。此外,它的计算也更加简单,只需要设置一个特定的阈值就可以计算激活值,这样极大的提高了运算的速度。所以近年来,ReLU激活函数的应用越来越广泛。
    但是ReLU激活函数也有一些缺陷:训练的时候不适合大梯度的输入数据,因为在参数更新之后,ReLU的神经元不会再任何数据节点被激活,这就会导致梯度永远为0。比如:输入的数据小于0时,梯度就会为0,这就导致了负的梯度被置0,而且今后也可能不会被任何数据所激活,也就是说ReLU的神经元“坏死”了。

    所以针对ReLU函数上述的缺点,又出现了带泄露的ReLU(Leaky ReLU)和带参数的ReLU(Parametric ReLU)。
其它激活函数:
    Leaky ReLU是ReLU激活函数的变形,主要是针对ReLU函数中神经元容易坏死的缺陷,将原点左侧小于0的部分,赋予一个很小的斜率。其效果通常要好于ReLU激活函数,但实践中使用的频率并没有那么高。数据公式为:f(x) = max(0, x) + γmin(0, x)。通常,γ是一个很小的常数,如:0.01。

    Parametric ReLU是ReLU激活函数的另一种变形,和Leaky ReLU函数一样是非饱和函数,解决了坏死难题。不同之处在于其在函数中引入一个可学习的参数,往往不同的神经元有不同的参数,所以第i个神经元的数学表达式为:f(x) = max(0, x) + γi min(0, x)。当γi 取0时,便可以视为ReLU函数,取很小的常数时,可视为Leaky ReLU函数。相对而言,Parametric ReLU激活函数的使用频率也不是很高。

损失函数:损失函数(loss function)又叫做代价函数(cost function),是用来评估模型的预测值与真实值不一致的程度,也是神经网络中优化的目标函数,神经网络训练或者优化的过程就是最小化损失函数的过程,损失函数越小,说明模型的预测值就越接近真是值,模型的健壮性也就越好。

常见的损失函数有以下几种:

(1) 0-1损失函数(0-1 lossfunction):

0-1损失函数是最为简单的一种损失函数,多适用于分类问题中,如果预测值与目标值不相等,说明预测错误,输出值为1;如果预测值与目标值相同,说明预测正确,输出为0,言外之意没有损失。其数学公式可表示为:

由于0-1损失函数过于理想化、严格化,且数学性质不是很好,难以优化,所以在实际问题中,我们经常会用以下的损失函数进行代替。

(2)感知损失函数(Perceptron Loss): 感知损失函数是对0-1损失函数的改进,它并不会像0-1损失函数那样严格,哪怕预测值为0.99,真实值为1,都会认为是错误的;而是给一个误差区间,只要在误差区间内,就认为是正确的。其数学公式可表示为:

(3)平方损失函数(quadratic loss function):

顾名思义,平方损失函数是指预测值与真实值差值的平方。损失越大,说明预测值与真实值的差值越大。平方损失函数多用于线性回归任务中,其数学公式为:

接下来,我们延伸到样本个数为N的情况,此时的平方损失函数为:

(4)Hinge损失函数(hinge loss function):

Hinge损失函数通常适用于二分类的场景中,可以用来解决间隔最大化的问题,常应用于著名的SVM算法中。其数学公式为:

其中在上式中,t是目标值{-1,+1},y为预测值的输出,取值范围在(-1,1)之间。

(5)对数损失函数(Log Loss):

对数损失函数也是常见的一种损失函数,常用于逻辑回归问题中,其标准形式为:

上式中,y为已知分类的类别,x为样本值,我们需要让概率p(y|x)达到最大值,也就是说我们要求一个参数值,使得输出的目前这组数据的概率值最大。因为概率P(Y|X)的取值范围为[0,1],log(x)函数在区间[0,1]的取值为负数,所以为了保证损失值为正数要在log函数前加负号。

(6)交叉熵损失函数(cross-entropy loss function):

交叉熵损失函数本质上也是一种对数损失函数,常用于多分类问题中。其数学公式为:

注意:公式中的x表示样本,y代表预测的输出,a为实际输出,n表示样本总数量。交叉熵损失函数常用于当sigmoid函数作为激活函数的情景,因为它可以完美解决平方损失函数权重更新过慢的问题。
 

 

 

以下整理自kreas官方文档:

        预定义初始化方法
        1、Zeros:全零初始化:keras.initializers.Zeros()

        2、Ones:全1初始化:keras.initializers.Ones()


        3、Constant:初始化为固定值value:keras.initializers.Constant(value=0)

        4、RandomNormal:正态分布初始化:keras.initializers.RandomNormal(mean=0.0, stddev=0.05, seed=None))
        mean:均值、stddev:标准差、seed:随机数种子

        5、RandomUniform:均匀分布初始化
        keras.initializers.RandomUniform(minval=-0.05, maxval=0.05, seed=None)
        minval:均匀分布下边界 maxval:均匀分布上边界 * seed:随机数种子

        6、TruncatedNormal(*****)
        keras.initializers.TruncatedNormal(mean=0.0, stddev=0.05, seed=None)
        mean:均值、stddev:标准差、seed:随机数种子
        截尾高斯分布初始化,该初始化方法与RandomNormal类似,
        但位于均值两个标准差以外的数据将会被丢弃并重新生成,
        形成截尾分布。该分布是神经网络权重和滤波器的推荐初始化方法。


        7、VarianceScaling:该初始化方法能够自适应目标张量的shape。
        keras.initializers.VarianceScaling(scale=1.0, mode='fan_in', distribution='normal', seed=None)
        当distribution="normal"时,样本从0均值,标准差为sqrt(scale / n)的截尾正态分布中产生。其中:
        * 当```mode = "fan_in"```时,权重张量的输入单元数。
        * 当```mode = "fan_out"```时,权重张量的输出单元数
        * 当```mode = "fan_avg"```时,权重张量的输入输出单元数的均值
        当distribution="uniform"时,权重从[-limit, limit]范围内均匀采样,其中limit = limit = sqrt(3 * scale / n)
        scale: 放缩因子,正浮点数
        mode: 字符串,“fan_in”,“fan_out”或“fan_avg”fan_in", "fan_out", "fan_avg".
        distribution: 字符串,“normal”或“uniform”.
        seed: 随机数种子

        8、Orthogonal:用随机正交矩阵初始化
        keras.initializers.Orthogonal(gain=1.0, seed=None)
        gain: 正交矩阵的乘性系数
        seed:随机数种子

        9、Identiy:使用单位矩阵初始化,仅适用于2D方阵
        keras.initializers.Identity(gain=1.0)
        gain:单位矩阵的乘性系数

        10、lecun_uniform
        lecun_uniform(seed=None)
        LeCun均匀分布初始化方法,参数由[-limit, limit]的区间中均匀采样获得,其中limit=sqrt(3 / fan_in), fin_in是权重向量的输入单元数(扇入)
        seed:随机数种子

        11、lecun_normal
        lecun_normal(seed=None)
        LeCun正态分布初始化方法,参数由0均值,标准差为stddev = sqrt(1 / fan_in)的正态分布产生,其中fan_in和fan_out是权重张量的扇入扇出(即输入和输出单元数目)

        12、glorot_normal
        glorot_normal(seed=None)
        Glorot正态分布初始化方法,也称作Xavier正态分布初始化,参数由0均值,标准差为sqrt(2 / (fan_in + fan_out))的正态分布产生,其中fan_in和fan_out是权重张量的扇入扇出(即输入和输出单元数目)

        13、glorot_uniform
        glorot_uniform(seed=None)
        Glorot均匀分布初始化方法,又成Xavier均匀初始化,参数从[-limit, limit]的均匀分布产生,其中limit为sqrt(6 / (fan_in + fan_out))。fan_in为权值张量的输入单元数,fan_out是权重张量的输出单元数。

        14、he_normal
        he_normal(seed=None)
        He正态分布初始化方法,参数由0均值,标准差为sqrt(2 / fan_in) 的正态分布产生,其中fan_in权重张量的扇入

        15、he_uniform
        he_normal(seed=None)
        LeCun均匀分布初始化方法,参数由[-limit, limit]的区间中均匀采样获得,其中limit=sqrt(6 / fan_in), fin_in是权重向量的输入单元数(扇入)

        16、自定义初始化器
        如果需要传递自定义的初始化器,则该初始化器必须是callable的,并且接收shape(将被初始化的张量shape)和dtype(数据类型)两个参数,并返回符合shape和dtype的张量。
        from keras import backend as K
        def my_init(shape, dtype=None):
            return K.random_normal(shape, dtype=dtype)
        model.add(Dense(64, init=my_init))

    优化器optimizers:
        两种使用方法:
            可以在调用model.compile()之前初始化一个优化器对象,然后传入该函数,
            sgd = optimizers.SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)
            model.compile(loss='mean_squared_error', optimizer=sgd)
            也可以在调用model.compile()时传递一个预定义优化器名。在后者情形下,优化器的参数将使用默认值。
            model.compile(loss='mean_squared_error', optimizer='sgd')
        优化器特殊参数:
            参数clipnorm和clipvalue是所有优化器都可以使用的参数,用于对梯度进行裁剪.
        常用优化器:
            SGD
            keras.optimizers.SGD(lr=0.01, momentum=0.0, decay=0.0, nesterov=False)
            随机梯度下降法,支持动量参数,支持学习衰减率,支持Nesterov动量
            参数:
            lr:大或等于0的浮点数,学习率
            momentum:大或等于0的浮点数,动量参数
            decay:大或等于0的浮点数,每次更新后的学习率衰减值
            nesterov:布尔值,确定是否使用Nesterov动量


            RMSprop
            keras.optimizers.RMSprop(lr=0.001, rho=0.9, epsilon=1e-06)
            除学习率可调整外,建议保持优化器的其他默认参数不变
            该优化器通常是面对递归神经网络时的一个良好选择
            参数:
            lr:大或等于0的浮点数,学习率
            rho:大或等于0的浮点数
            epsilon:大或等于0的小浮点数,防止除0错误


            Adagrad
            keras.optimizers.Adagrad(lr=0.01, epsilon=1e-06)
            建议保持优化器的默认参数不变
            参数:
            lr:大或等于0的浮点数,学习率
            epsilon:大或等于0的小浮点数,防止除0错误


            Adadelta
            keras.optimizers.Adadelta(lr=1.0, rho=0.95, epsilon=1e-06)
            建议保持优化器的默认参数不变
            参数
            lr:大或等于0的浮点数,学习率
            rho:大或等于0的浮点数
            epsilon:大或等于0的小浮点数,防止除0错误


            Adam
            keras.optimizers.Adam(lr=0.001, beta_1=0.9, beta_2=0.999, epsilon=1e-08)
            参数
            lr:大或等于0的浮点数,学习率
            beta_1/beta_2:浮点数, 0<beta<1,通常很接近1
            epsilon:大或等于0的小浮点数,防止除0错误


            Adamax
            keras.optimizers.Adamax(lr=0.002, beta_1=0.9, beta_2=0.999, epsilon=1e-08)
            Adamax优化器来自于Adam的论文的Section7,该方法是基于无穷范数的Adam方法的变体。
            参数:
            lr:大或等于0的浮点数,学习率
            beta_1/beta_2:浮点数, 0<beta<1,通常很接近1
            epsilon:大或等于0的小浮点数,防止除0错误


            Nadam
            keras.optimizers.Nadam(lr=0.002, beta_1=0.9, beta_2=0.999, epsilon=1e-08, schedule_decay=0.004)
            Nesterov Adam optimizer: Adam本质上像是带有动量项的RMSprop,Nadam就是带有Nesterov 动量的Adam RMSprop
            参数
            lr:大或等于0的浮点数,学习率
            beta_1/beta_2:浮点数, 0<beta<1,通常很接近1
            epsilon:大或等于0的小浮点数,防止除0错误


            TFOptimizer
            keras.optimizers.TFOptimizer(optimizer)
            TF优化器的包装器


        activation:激活函数
            激活函数可以通过设置单独的激活层实现,也可以在构造层对象时通过传递activation参数实现。
                model.add(Dense(64, activation='tanh'))
                或者
                def tanh(x):
                    return K.tanh(x)
                model.add(Dense(64, activation=tanh))
                model.add(Activation(tanh))
            预定义激活函数
                softmax:对输入数据的最后一维进行softmax,输入数据应形如(nb_samples, nb_timesteps, nb_dims)或(nb_samples,nb_dims)
                elu:
                selu: 可伸缩的指数线性单元(Scaled Exponential Linear Unit),参考Self-Normalizing Neural Networks
                softplus:
                softsign:
                relu:
                tanh:
                sigmoid:
                hard_sigmoid:
                linear:
            高级激活函数:
                对于简单的Theano/TensorFlow/CNTK不能表达的复杂激活函数,如含有可学习参数的激活函数,可通过高级激活函数实现。

                高级激活层Advanced Activation
                    LeakyReLU层
                    keras.layers.advanced_activations.LeakyReLU(alpha=0.3)
                    LeakyRelU是修正线性单元(Rectified Linear Unit,ReLU)的特殊版本,当不激活时,LeakyReLU仍然会有非零输出值,从而获得一个小梯度,避免ReLU可能出现的神经元“死亡”现象。即,f(x)=alpha * x for x < 0, f(x) = x for x>=0
                    参数:alpha:大于0的浮点数,代表激活函数图像中第三象限线段的斜率
                    输入:shape:任意,当使用该层为模型首层时需指定input_shape参数
                    输出:shape:与输入相同


                    PReLU层
                    keras.layers.advanced_activations.PReLU(alpha_initializer='zeros', alpha_regularizer=None, alpha_constraint=None, shared_axes=None)
                    该层为参数化的ReLU(Parametric ReLU),表达式是:f(x) = alpha * x for x < 0, f(x) = x for x>=0,此处的alpha为一个与xshape相同的可学习的参数向量。
                    参数:
                    alpha_initializer:alpha的初始化函数
                    alpha_regularizer:alpha的正则项
                    alpha_constraint:alpha的约束项
                    shared_axes:该参数指定的轴将共享同一组科学系参数,例如假如输入特征图是从2D卷积过来的,具有形如(batch, height, width, channels)这样的shape,则或许你会希望在空域共享参数,这样每个filter就只有一组参数,设定shared_axes=[1,2]可完成该目标
                    输入shape:任意,当使用该层为模型首层时需指定input_shape参数
                    输出shape:与输入相同


                    ELU层
                    keras.layers.advanced_activations.ELU(alpha=1.0)
                    ELU层是指数线性单元(Exponential Linera Unit),表达式为: 该层为参数化的ReLU(Parametric ReLU),表达式是:f(x) = alpha * (exp(x) - 1.) for x < 0, f(x) = x for x>=0
                    参数:alpha:控制负因子的参数
                    输入shape:任意,当使用该层为模型首层时需指定input_shape参数
                    输出shape:与输入相同


                    ThresholdedReLU层
                    keras.layers.advanced_activations.ThresholdedReLU(theta=1.0)
                    该层是带有门限的ReLU,表达式是:f(x) = x for x > theta,f(x) = 0 otherwise
                    参数:theata:大或等于0的浮点数,激活门限位置
                    输入shape:任意,当使用该层为模型首层时需指定input_shape参数
                    输出shape:与输入相同

        序贯(Sequential)模型:
            units:下一层的神经元个数
            input_dim:输入层神经元个数
            kernel_initializer:初始化方法
            activation:激活函数、每一层都有自己的激活函数
            model.add(k.layers.Dense(units=17, input_dim=16, kernel_initializer="",activation="relu"))
            

            开始编译模型:模型方法compile
                 model.compile(self, optimizer, loss, metrics=[], loss_weights=None, sample_weight_mode=None)

            参数:
                optimizer:优化器,为预定义优化器名或优化器对象,参考优化器
                loss:目标函数,为预定义损失函数名或一个目标函数,参考目标函数
                metrics:列表,包含评估模型在训练和测试时的性能的指标,典型用法是metrics=['accuracy']如果要在多输出模型中为不同的输出指定不同的指标,可像该参数传递一个字典,例如metrics={'ouput_a': 'accuracy'}
                sample_weight_mode:如果你需要按时间步为样本赋权(2D权矩阵),将该值设为“temporal”。默认为“None”,代表按样本赋权(1D权)。如果模型有多个输出,可以向该参数传入指定sample_weight_mode的字典或列表。在下面fit函数的解释中有相关的参考内容。
                kwargs:使用TensorFlow作为后端请忽略该参数,若使用Theano作为后端,kwargs的值将会传递给 K.function
                【Tips】如果你只是载入模型并利用其predict,可以不用进行compile。在Keras中,compile主要完成损失函数和优化器的一些配置,是为训练服务的。predict会在内部进行符号函数的编译工作(通过调用_make_predict_function生成函数)【@白菜,@我是小将】

            模型训练 fit
                fit(self, x, y, batch_size=32, nb_epoch=10, verbose=1, callbacks=[], validation_split=0.0, validation_data=None, shuffle=True, class_weight=None, sample_weight=None)

            参数:
                x:输入数据。如果模型只有一个输入,那么x的类型是numpy array,如果模型有多个输入,那么x的类型应当为list,list的元素是对应于各个输入的numpy array。如果模型的每个输入都有名字,则可以传入一个字典,将输入名与其输入数据对应起来。
                y:标签,numpy array。如果模型有多个输出,可以传入一个numpy array的list。如果模型的输出拥有名字,则可以传入一个字典,将输出名与其标签对应起来。
                batch_size:整数,指定进行梯度下降时每个batch包含的样本数。训练时一个batch的样本会被计算一次梯度下降,使目标函数优化一步。
                nb_epoch:整数,训练的轮数,训练数据将会被遍历nb_epoch次。Keras中nb开头的变量均为"number of"的意思
                verbose:日志显示,0为不在标准输出流输出日志信息,1为输出进度条记录,2为每个epoch输出一行记录
                callbacks:list,其中的元素是keras.callbacks.Callback的对象。这个list中的回调函数将会在训练过程中的适当时机被调用,参考回调函数
                validation_split:0~1之间的浮点数,用来指定训练集的一定比例数据作为验证集。验证集将不参与训练,并在每个epoch结束后测试的模型的指标,如损失函数、精确度等。
                validation_data:形式为(X,y)或(X,y,sample_weights)的tuple,是指定的验证集。此参数将覆盖validation_spilt。
                shuffle:布尔值,表示是否在训练过程中每个epoch前随机打乱输入样本的顺序。
                class_weight:字典,将不同的类别映射为不同的权值,该参数用来在训练过程中调整损失函数(只能用于训练)。该参数在处理非平衡的训练数据(某些类的训练样本数很少)时,可以使得损失函数对样本数不足的数据更加关注。
                sample_weight:权值的numpy array,用于在训练时调整损失函数(仅用于训练)。可以传递一个1D的与样本等长的向量用于对样本进行1对1的加权,或者在面对时序数据时,传递一个的形式为(samples,sequence_length)的矩阵来为每个时间步上的样本赋不同的权。这种情况下请确定在编译模型时添加了sample_weight_mode='temporal'。
                fit函数返回一个History的对象,其History.history属性记录了损失函数和其他指标的数值随epoch变化的情况,如果有验证集的话,也包含了验证集的这些指标变化情况

            模型评估:model.evaluate
            evaluate(self, x, y, batch_size=32, verbose=1, sample_weight=None)
            本函数按batch计算在某些输入数据上模型的误差,其参数有:
                x:输入数据,与fit一样,是numpy array或numpy array的list
                y:标签,numpy array
                batch_size:整数,含义同fit的同名参数
                verbose:含义同fit的同名参数,但只能取0或1
                sample_weight:numpy array,含义同fit的同名参数
                本函数返回一个测试误差的标量值(如果模型没有其他评价指标),或一个标量的list(如果模型还有其他的评价指标)。model.metrics_names将给出list中各个值的含义。
                如果没有特殊说明,以下函数的参数均保持与fit的同名参数相同的含义
                如果没有特殊说明,以下函数的verbose参数(如果有)均只能取0或1
                    


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值