工作原理:
嵌入Layer # python 3.6import tensorflow as tfimport numpy as npsess = tf.Session()# 二、TensorFlow的嵌入layer# 在同一个计算图中进行多个乘法操作# 1. 创建数据和占位符array = np.array([[1.,3.,5.,7.,9.],[2.,4.,6.,8.,10.],[-4,-2,0,1,2]]) # 3×5的矩阵x_vals = np.array([array, array+1]) # 两个3×5的矩阵# 如果未知占位符的维度可以设为None shape=(3,None)x_data = tf.placeholder(tf.float32,shape=(3,5))# 2. 创建常量矩阵c1 = tf.constant([[1.],[0.],[-1.],[3.],[2.]])c2 = tf.constant([[2.]])c3 = tf.constant([[10.]])# 3. 声明计算图操作prod1 = tf.matmul(x_data, c1) # (3,5) × (5×1) = (3,1)prod2 = tf.matmul(prod1, c2) # (3,1) × (1×1) = (3,1)add1 = tf.add(prod2, c3) #print(prod2)print(c3)print(add1)# 4. 计算图赋值for x_val in x_vals:print(sess.run(add1,feed_dict={x_data:x_val}))# print("----")# print(sess.run(prod2,feed_dict={x_data:x_val}))# print("----")# print(sess.run(c3,feed_dict={x_data:x_val}))# print("----")# print(sess.run(add1,feed_dict={x_data:x_val}))原理:
多层Layer # 三、TensorFlow的多层Layer# 如何连接传播数据的多层layer?# 1. 通过numpy创建2D图像,4×4像素图片。# 将创建成四维:第一维和最后一维大小为1。# 注意,TensorFlow的图像函数是处理四维图片的,# 这四维是:图片数量(1)、高度、宽度和颜色通道(1)。# 这里是一张图片,单颜色通道,所以设两个维度值为1:x_shape = [1,4,4,1]x_val = np.random.uniform(size=x_shape)# 2. 创建占位符,用来传入图片x_data = tf.placeholder(tf.float32,shape=x_shape)# 3. 创建过滤4×4像素图片的滑动窗口# 用conv2d()卷积2×2形状的常量窗口:传入滑动窗口、过滤器和步长# 窗口大小:2×2 步长:2# 为了计算平均值,用常量为0.25的向量与2×2窗口卷积filter = tf.constant(0.25, shape=[2,2,1,1])strides = [1,2,2,1]mov_avg_layer = tf.nn.conv2d(x_data,filter,strides,padding='SAME', name='Moving_Avg_Window')# 4. 自定义layer,操作滑动窗口平均的2×2的返回值# 输入张量乘以2×2的矩阵张量 然后每个元素加1# 因为矩阵乘法只计算二维矩阵所以剪裁squeeze()图形的多余维度def custom_layer(input_matrix):input_matrix_sqeezed = tf.squeeze(input_matrix)a = tf.constant([[1.,2.],[-1.,3.]])b = tf.constant(1.,shape=[2,2])temp1 = tf.matmul(a, input_matrix_sqeezed)temp = tf.add(temp1,b)return tf.sigmoid(temp)# 5. 将自定义的layer加入计算图,用tf.name.scope命名唯一的layer名字# 后续在计算图中可以折叠或者扩展Custom_Layerwith tf.name_scope('Custom_Layer') as scope:custom_layer1 = custom_layer(mov_avg_layer)# 6. 传入4×4的像素图片,执行计算图print(sess.run(custom_layer1, feed_dict={x_data:x_val}))原理