TensorFlow下的CNN測試

由於本人的機器性能不是很好,跑出來的效果不佳,但是可以看出:backword計算差不多是forword計算的4倍左右。CNN的計算速度相比其他神經網路是比較慢的。

代碼:

from datetime import datetimenimport mathnimport timenimport tensorflow as tfnnbatch_size = 32nnum_batches = 100nn# 列印和輸出迭代過程中的信息ndef print_activations(t):ntprint(t.op.name, ,t.get_shape().as_list())n# 這裡面主要是CNN的主要操作tndef interence(images):ntparameters = []n#第一次卷積tntwith tf.name_scope(conv1) as scope:n#使用的截斷的正態分布的卷積核nttkernel = tf.Variable(tf.truncated_normal([11,11,3,64],dtype=tf.float32,stddev=1e-1),name=weights)n# 卷積操作nttconv = tf.nn.conv2d(images,kernel,[1,4,4,1],padding=SAME)nttbiases = tf.Variable(tf.constant(0.0,shape=[64],dtype=tf.float32),trainable=True,name=biases)nttbias = tf.nn.bias_add(conv,biases)nttconv1 = tf.nn.relu(bias,name=scope)nttprint_activations(conv1)nttparameters += [kernel,biases]n# 使用的LRN層,此層的作用是對局部神經元創建競爭機制,抑制其他反饋較小的神經元,增強模板的泛化能力。ntlrn1 = tf.nn.lrn(conv1,4,bias=1.0,alpha=0.001/9,beta=0.75,name=lrn1)ntpool1 = tf.nn.max_pool(lrn1,ksize=[1,3,3,1],strides=[1,2,2,1],padding=VALID,name=pool1)ntprint_activations(pool1)ntn# 第二次卷積ntwith tf.name_scope(conv2) as scope:nttkernel = tf.Variable(tf.truncated_normal([5,5,64,192],dtype=tf.float32,stddev=1e-1),name=weights)nttconv = tf.nn.conv2d(pool1,kernel,[1,1,1,1],padding=SAME)nttbiases = tf.Variable(tf.constant(0.0,shape=[192],dtype=tf.float32),trainable=True,name=biases)nttbias = tf.nn.bias_add(conv,biases)nttconv2 = tf.nn.relu(bias,name=scope)nttparameters += [kernel,biases]nttprint_activations(conv2)ntntlrn2 = tf.nn.lrn(conv2,4,bias=1.0,alpha=0.001/9,beta=0.75,name=lrn2)ntpool2 = tf.nn.max_pool(lrn2,ksize=[1,3,3,1],strides=[1,2,2,1],padding=VALID,name=pool2)ntprint_activations(pool2)nn# 第三次卷積tntwith tf.name_scope(conv3) as scope:nttkernel = tf.Variable(tf.truncated_normal([3,3,192,384],dtype=tf.float32,stddev=1e-1),name=weights)nttconv = tf.nn.conv2d(conv2,kernel,[1,1,1,1],padding=SAME)nttbiases = tf.Variable(tf.constant(0.0,shape=[384],dtype=tf.float32),trainable=True,name=biases)nttbias = tf.nn.bias_add(conv,biases)nttconv3 = tf.nn.relu(bias,name=scope)nttparameters += [kernel,biases]nttprint_activations(conv3)nttn# 第四次卷積ntwith tf.name_scope(conv4) as scope:nttkernel = tf.Variable(tf.truncated_normal([3,3,384,256],dtype=tf.float32,stddev=1e-1),name=weights)nttconv = tf.nn.conv2d(conv3,kernel,[1,1,1,1],padding=SAME)nttbiases = tf.Variable(tf.constant(0.0,shape=[256],dtype=tf.float32),trainable=True,name=biases)nttbias = tf.nn.bias_add(conv,biases)nttconv4 = tf.nn.relu(bias,name=scope)nttparameters += [kernel,biases]nttprint_activations(conv4)nn# 第五次卷積tntwith tf.name_scope(conv5) as scope:nttkernel = tf.Variable(tf.truncated_normal([3,3,256,256],dtype=tf.float32,stddev=1e-1),name=weights)nttconv = tf.nn.conv2d(conv4,kernel,[1,1,1,1],padding=SAME)nttbiases = tf.Variable(tf.constant(0.0,shape=[256],dtype=tf.float32),trainable=True,name=biases)nttbias = tf.nn.bias_add(conv,biases)nttconv5 = tf.nn.relu(bias,name=scope)nttparameters += [kernel,biases]nttprint_activations(conv5)n# 最大的一次池化tntpool5 = tf.nn.max_pool(conv5,ksize=[1,3,3,1],strides=[1,2,2,1],padding=VALID,name=pool5)ntprint_activations(pool5)ntreturn pool5,parametersnn# 計算運行時的時長ndef time_tensorflow_run(session,target,info_string):ntnum_step_burn_in = 10nttotal_duration = 0.0nttotal_duration_squared = 0.0ntntfor i in range(num_batches + num_step_burn_in):nttstart_time = time.time()ntt_ = session.run(target)nttduration = time.time() - start_timenttif i >= num_step_burn_in:ntttif not i % 10:nttttprint(%s: step %d,duration=%.3f % (datetime.now(),i -num_step_burn_in,duration))nttttotal_duration += durationnttttotal_duration_squared += duration*durationntntmn = total_duration / num_batchesntvr = total_duration_squared / num_batches - mn*mnntsd = math.sqrt(vr)ntprint(%s: %s across %d steps,%3f +/- %.3f sec / batch % (datetime.now(),info_string,num_batches,mn,sd))nndef run_benchmark():ntwith tf.Graph().as_default():nttimage_size = 224nttimages = tf.Variable(tf.random_normal([batch_size,image_size,image_size,3],dtype=tf.float32,stddev=1e-1))nttpool5,parameters = interence(images)nttinit = tf.global_variables_initializer()nttsess = tf.Session()nttsess.run(init)nttnttime_tensorflow_run(sess,pool5,"Forward")ntobjective = tf.nn.l2_loss(pool5)ntgrad = tf.gradients(objective,parameters)nttime_tensorflow_run(sess,grad,"Forward-backward")nttnif __name__ == "__main__":ntrun_benchmark()ntn

推薦閱讀:

TAG:让子弹飞一会儿 | 军事 | 武器 | 战争 | 羞羞的铁拳电影 | 空天猎电影 | 缝纫机乐队电影 | 健康 | 食物 | 養生 | 醫學 | 生物 | Splatoon | 任天堂Nintendo | 第三人称视角射击游戏TPS | 超融合 | 不被发布 | 王端端 | 姚小逃 | 汪惟 | IT项目管理 | 软件外包 | 软件众包 | 验证码识别 | Windows开发 | UWPWindows开发 | 女生 | 油性皮膚 | 美容護膚 | 情感 | 朋友 | 家人相處 | 瓦利哥的机器岁月 | 综艺 | LoveLive!Sunshine!! | DeepTech深科技 | TensorFlow |