tensorflow很強大,,很靈活,。但對于新手并不友好,主要不是復雜,,準確來說是繁瑣,。因為拆開一個個點來看,都不復雜,,就像積木似的,。 但每次為了拼一層,要做大量的事情,,就是太瑣碎了,。正因為如此,才有了tflearn,keras這樣的封裝,。keras原本是為theano封裝的,,theano本身就是一個高性能的矩陣運算庫,算不上深度學習庫,,后來又兼容的tensorflow,,CNTK等。 keras為了通用,,注定要封裝更多層次的抽象,,對于源碼理解就帶來了困難。而tflearn的粒度正好適中,,它就是為tensorflow而生,,而且它生成的結構也是tensor,用session.run是可以直接計算的。 本文理解一下tflearn內建的操作符,就是tensorlayer里號稱的中等程度的封裝,,其實tflearn也有,。 import tensorflow as tf import tflearn
#這里下載并加載minist數據集 import tflearn.datasets.mnist as mnist trainX, trainY, testX, testY = mnist.load_data(one_hot=True)
# 為演示效果,直接使用tersorflow的placeholder with tf.Graph().as_default(): # 輸入,、輸出變量 X = tf.placeholder("float", [None, 784]) Y = tf.placeholder("float", [None, 10]) #這里是參數,,就是WX+b W1 = tf.Variable(tf.random_normal([784, 256])) W2 = tf.Variable(tf.random_normal([256, 256])) W3 = tf.Variable(tf.random_normal([256, 10])) b1 = tf.Variable(tf.random_normal([256])) b2 = tf.Variable(tf.random_normal([256])) b3 = tf.Variable(tf.random_normal([10]))
# 下面就是一個多層感知器 def dnn(x): # TFlearn有一個prelu的激活函數 x = tflearn.prelu(tf.add(tf.matmul(x, W1), b1)) tflearn.summaries.monitor_activation(x) # Monitor activation x = tflearn.prelu(tf.add(tf.matmul(x, W2), b2)) tflearn.summaries.monitor_activation(x) # Monitor activation x = tf.nn.softmax(tf.add(tf.matmul(x, W3), b3)) return x
net = dnn(X)
# tflearn提供的計算交叉熵損失的函數 loss = tflearn.categorical_crossentropy(net, Y)
# tflearn提供的計算測試集準確性的函數 acc = tflearn.metrics.accuracy_op(net, Y)
# 下面是優(yōu)化函數 optimizer = tflearn.SGD(learning_rate=0.1, lr_decay=0.96, decay_step=200) step = tflearn.variable("step", initializer='zeros', shape=[]) optimizer.build(step_tensor=step) optim_tensor = optimizer.get_tensor()
# 使用 TFLearn Trainer trainop = tflearn.TrainOp(loss=loss, optimizer=optim_tensor, metric=acc, batch_size=128, step_tensor=step) trainer = tflearn.Trainer(train_ops=trainop, tensorboard_verbose=0) # Training for 10 epochs. trainer.fit({X: trainX, Y: trainY}, val_feed_dicts={X: testX, Y: testY}, n_epoch=10, show_metric=True) 這個粒度的封裝,其實很適合與tensorflow一起使用,,比那個tensorlayer好用太多,。 關于作者:魏佳斌,互聯網產品/技術總監(jiān),,北京大學光華管理學院(MBA),特許金融分析師(CFA),,資深產品經理/碼農。偏愛python,,深度關注互聯網趨勢,,人工智能,AI金融量化,。致力于使用最前沿的認知技術去理解這個復雜的世界,。
|