TensorFlow 1.X有哪些问题?
TensorFlow 2.0 推荐使用tf.keras、tf.data等高级库;
Eager模式就是类似于Python这样的命令式编程,写好程序之后,不需要编译,就可以直接运行,而且非常直观;
而之前的Session静态图模式则类似于C/C++的声明式编程,写好程序之后要先编译,然后才能运行;
Eager模式是在TF1.4版本之后引入的,在TF2.x的版本会把eager模式变为默认执行模式;
好处:
优点:
缺点:
推荐使用@tf.function(而非1.x中的tf.Session)实现Graph Execution,从而将模型转换为易于部署且高性能的TensorFlow图模型;
举个例子:
import tensorflow as tf
@tf.function
def simple_nn_layer(x, y):
return tf.nn.relu(tf.matmul(x, y))
x = tf.random.uniform((3,3))
y = tf.random.uniform((3,3))
simple_nn_layer(x,y)
TensorFlow API一共可以分为三个层次,即低阶API、中阶API、高阶API:
import tensorflow as tf
a = tf.constant([[1,2],[3,4]])
b = tf.constant([[5,6],[7,8]])
# 标量计算
a+b tf.math.add(a,b)
a-b tf.math.subtract(a,b)
a*b tf.math.multiply(a,b)
a/b tf.math.divide(a,b)
# 向量计算
a = tf.range(1,100)
tf.print(tf.reduce_sum(a))
tf.print(tf.reduce_mean(a))
tf.print(tf.reduce_max(a))
tf.print(tf.reduce_min(a))
tf.print(tf.reduce_prod(a))
a = tf.random.uniform(shape=(10,5), minval=0, maxval=10) # 矩阵
tf.nn.softmax(a) # softmax操作
a = tf.random.uniform(shape(10,5), minval=-0.5, maxval=-0.5) # 矩阵
b = tf.keras.layers.Dense(10)(a) # 全连接层
b = tf.nn.softmax(b) # softmax操作
a = tf.random.uniform(shape=(10,100,50), minval=-0.5, maxval=-0.5) # 矩阵
b = tf.keras.LSTM(100)(a) # LSTM层
b = tf.keras.layers.Dense(b) # 全连接层
b = tf.nn.softmax(b) # softmax操作
tensorflow.keras.models
建模方式有三种:
如何构建模型将会在后面详细介绍,下面我们举个例子:
import tensorflow as tf
# 随机初始化输入X和输出y
X = tf.random.uniform(shape=(10,100,50),minval=-0.5,maxval=0.5)
y = tf.random.categorical(tf.random.uniform(shape=(10.3),minval=-0.5,maxval=-0.5),2)
# 构造模型
model = tf.keras.models.Sequential()
model.add(tf.keras.layers.LSTM(100,input_shape=(100,50)))
model.add(tf.keras.layers.Dense(10))
model.add(tf.keras.layers.Dense(2,activation='softmax'))
model.compilc(optimizer='adam',loss='categorical crossentropy',metrics=['accuracy'])
model.summary()
model.fit(X,y)
上图中的tf.data用于构造数据,Keras用于构造模型的层,接着用CPU、GPU、TPU进行加速训练,对训练结果使用TensorBoard进行可视化,可以对模型进行保存(Saved model),TensorFlow HUb的作用是模型复用,Deployment的作用是模型部署。
深度之眼课程——《TensorFlow》