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

在深度学习中遇到的一些坑
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激活函数又名修正线性单元,是目前深层神经网络中越来越受欢迎的一种激活函数,其数学表达式为࿱

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值