安装tensorflow
1. 安装virtualenv
sudo easy_install pip # 如果还没有安装 pip
sudo pip install --upgrade virtualenv
2. 创建单独环境
which python3
返回:/usr/local/bin/python3
virtualenv -p /usr/local/bin/python3 --no-site-packages ~/tensorflow2
cd ~/tensorflow2
source bin/activate
3.安装tf2
使用国内清华源:
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple tensorflow==2.0.0-beta0
4. 查看当前tensorflow版本
pip show tensorflow
或者在python中:
print(tf.__version__)
5. 查看tensorlfow安装路径
print(tf.__path__)
6. pip查看当前有更新版本的包
pip list --outdated
7. 更新tensorflow到最新版
我原本安装的tensorflow是2.0.0-beta0版本,后来出了2.0.0正式版,使用以下命令更新到最新版:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -U tensorflow
升级到2.0.0正式版后发现少了好多waring而且快了好多(我安装的是最low的cpu版,而且不支持AVX2 FMA的版本,因为暂时只是处于基础学习阶段)。
运行警告
- numpy相关警告:
FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.
这个是因为numpy版本太高,需要降级。
查看当前numpy版本:
pip3 show numpy
返回:
Name: numpy
Version: 1.17.2
Summary: NumPy is the fundamental package for array computing with Python.
Home-page: https://www.numpy.org
Author: Travis E. Oliphant et al.
Author-email: None
License: BSD
Location: /Users/melotwbt/tensorflow2/lib/python3.7/site-packages
Requires:
Required-by: tensorflow, tb-nightly, Keras-Preprocessing, Keras-Applications, h5py
numpy版本降级:
pip3 install -U numpy==1.16.0
- cpu相关警告
Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA
直接在代码中屏蔽掉:
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
安装OpenCV
使用国内清华源:
# python3版本的基本包安装
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple opencv-python
# python3版本的额外包安装
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple opencv-contrib-python
学习资料
安装:
解决国内安装tensorflow, opencv等安装不成功或下载太慢问题
TensorFlow 2.0学习:
高效的TensorFlow 2.0 (tensorflow2官方教程翻译)
简单粗暴 TensorFlow 2.0 ,[GitHub地址]
TensorFlow 和 NumPy 的 Broadcasting 机制探秘
TensorFlow 2.0直接内置了Keras,跟Keras官方的API是一致的,所以Keras官方的文档也可以学习:
官方版: Keras 中文文档
民间版:Keras中文文档
官方版的左边目录栏有问题,有的不能展示出来。而且有的章节好像民间版的更详细。
知识点:
keras.layers.Embedding
YJango的Word Embedding--介绍
深度学习中 Embedding层两大作用的个人理解
词向量与Embedding究竟是怎么回事?
深度学习中Keras中的Embedding层的理解与使用
一文搞懂word embeddding和keras中的embedding
个人浅显的理解:
整体过程是:将输入数据one_hot映射乘以一个矩阵e得到一个降维的矩阵然后做为神经网络下一层的输入层。
那么矩阵e是如何得到的呢?
Embedding层自动通过无监督学习从输入数据中得出矩阵e,并且将输入数据与矩阵e计算映射出降维矩阵,做为下一层的输入。
矩阵e就是无监督学习得到的参数,降维的过程就是找出输入数据之间的联系。
不知道理解的对不对。
Axis轴
Numpy:对Axis的理解
我自己的理解:
0轴就是最外层数组,然后依次向内。
设axis=i,则Numpy沿着第i个下标变化的方向进行操作。
举例:
import numpy as np
def test1():
a = np.arange(24).reshape(3,2,4)
print('arry a:', a)
print('============')
print('a[0]:', a[0])
print('============')
print('a[0][0]:', a[0][0])
print('============')
print('a[0][0][0]:', a[0][0][0])
for i in range(3):
print('============')
s = np.sum(a, axis=i)
print('sum%d:' % i, s, 'shape:', s.shape)
if __name__ == "__main__":
test1()
输出:
============
arry a: [[[ 0 1 2 3]
[ 4 5 6 7]]
[[ 8 9 10 11]
[12 13 14 15]]
[[16 17 18 19]
[20 21 22 23]]]
============
a[0]: [[0 1 2 3]
[4 5 6 7]]
============
a[0][0]: [0 1 2 3]
============
a[0][0][0]: 0
============
sum0: [[24 27 30 33]
[36 39 42 45]] shape: (2, 4)
============
sum1: [[ 4 6 8 10]
[20 22 24 26]
[36 38 40 42]] shape: (3, 4)
============
sum2: [[ 6 22]
[38 54]
[70 86]] shape: (3, 2)
当axis=0,该轴上的元素有3个:a[0],a[1],a[2]。
当axis=1,该轴上的元素有2个:(a[0][0],a[0][1])、(a[1][0],a[1][1])、(a[2][0],a[2][1])。
np.sum(a, axis=0)
的计算过程:
a[0][0][0]+a[1][0][0]+a[2][0][0] = 0+8+16 = 24,
a[0][0][1]+a[1][0][1]+a[2][0][1] = 1+9+17 = 27,
a[0][0][2]+a[1][0][2]+a[2][0][2] = 2+10+18 = 30,
a[0][0][3]+a[1][0][3]+a[2][0][3] = 3+11+19 = 33,
a[0][1][0]+a[1][1][0]+a[2][1][0] = 4+12+20 = 36,
a[0][1][1]+a[1][1][1]+a[2][1][1] = 5+13+21 = 39,
a[0][1][2]+a[1][1][2]+a[2][1][2] = 6+14+22 = 42,
a[0][1][3]+a[1][1][3]+a[2][1][3] = 7+15+23 = 45,
np.sum(a, axis=1)
的计算过程:
a[0][0][0]+a[0][1][0] = 0+4 = 4,
a[0][0][1]+a[0][1][1] = 1+5 = 6,
a[0][0][2]+a[0][1][2] = 2+6 = 8,
a[0][0][3]+a[0][1][3] = 3+7 = 10,
...
np.sum(a, axis=2)
的计算过程:
a[0][0][0]+a[0][0][1] +a[0][0][2] +a[0][0][3] = 0+1+2+3 = 6,
a[0][1][0]+a[0][1][1] +a[0][1][2] +a[0][1][3] = 4+5+6+7 = 22,
...
从以上例子可以看出相加时变化的都是该轴对应的数组下标。
另外我发觉:
1. 轴的操作运算都是在数组维数内,不会跨出数组维数。
2. 运算操作后的结果都降了1维,即从3维变成2维,即降了该操作轴。
axis=0操作后原shape(3,2,4)变成shape(2,4)。
axis=1操作后原shape(3,2,4)变成shape(3,4)。
axis=2操作后原shape(3,2,4)变成shape(3,2)。
einsum 爱因斯坦求和约定
einsum可以替代但不限于以下函数:
矩阵求迹:trace
求矩阵对角线:diag
张量(沿轴)求和:sum
张量转置:transopose
矩阵乘法:dot
张量乘法:tensordot
向量内积:inner
外积:outer
一个函数打天下,einsum
tensorflow 乘法最强利器: einsum
NumPy中einsum的基本介绍
einsum满足你一切需要:深度学习中的爱因斯坦求和约定
如何理解和使用NumPy.einsum?