keras 與tensorflow 混合使用
keras 與tensorflow 混合使用
最近tensorflow更新了新版本,到1.4了。做了許多更新,當然重要的是增加了tf.keras. 畢竟keras對於模型搭建的方便大家都是有目共睹的。
喜歡keras風格的模型搭建而不喜歡tensorflow的方式。
但是個人覺得tensorflow的對於loss function定義的靈活性,還是非常便捷的,所以秉承着將二者的優勢放在一起的想法,研究了一下如何混合的過程。
眾所周知,keras搭建模型有兩種方式,Sequential 和 function(?)這兩種方式,而函數式搭建每一層返回的都是tensor結果,這就和tensorflow里面的對上了。所以做了如下初探:
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data
# build module
img = tf.placeholder(tf.float32, shape=(None, 784))
labels = tf.placeholder(tf.float32, shape=(None, 10))
x = tf.keras.layers.Dense(128, activation='relu')(img)
x = tf.keras.layers.Dense(128, activation='relu')(x)
prediction = tf.keras.layers.Dense(10, activation='softmax')(x)
loss = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(logits=prediction, labels=labels))
train_optim = tf.train.AdamOptimizer().minimize(loss)
mnist_data = input_data.read_data_sets('MNIST_data/', one_hot=True)
with tf.Session() as sess:
init = tf.global_variables_initializer()
sess.run(init)
for _ in range(1000):
batch_x, batch_y = mnist_data.train.next_batch(50)
sess.run(train_optim, feed_dict={img: batch_x, labels: batch_y})
acc_pred = tf.keras.metrics.categorical_accuracy(labels, prediction)
pred = sess.run(acc_pred, feed_dict={labels: mnist_data.test.labels, img: mnist_data.test.images})
print('accuracy: %.3f' % (sum(pred)/len(mnist_data.test.labels)))