Search code examples
tensorflowkeraskeras-layer

Combine tf.keras.layers with Tensorflow low level API


Can i combine tf.keras.layers with low level tensorflow?

the code is not correct but i want to do something like that:create placeholders that later will be fed with data (in tf.Session()) and to feed that data to my model

X, Y = create_placeholders(n_x, n_y)

output = create_model('channels_last')(X)

cost = compute_cost(output, Y)

Solution

  • Yes, it is the same as using tf.layers.dense(). Using tf.keras.layers.Dense() is actually a preferred way in newest tensorflow version 1.13 (tf.layers.dense() is deprectated). For example

    
    import tensorflow as tf
    import numpy as np
    
    x_train = np.array([[-1.551, -1.469], [1.022, 1.664]], dtype=np.float32)
    y_train = np.array([1, 0], dtype=int)
    
    x = tf.placeholder(tf.float32, shape=[None, 2])
    y = tf.placeholder(tf.int32, shape=[None])
    
    with tf.name_scope('network'):
        layer1 = tf.keras.layers.Dense(2, input_shape=(2, ))
        layer2 = tf.keras.layers.Dense(2, input_shape=(2, ))
        fc1 = layer1(x)
        logits = layer2(fc1)
    
    with tf.name_scope('loss'):
        xentropy = tf.nn.sparse_softmax_cross_entropy_with_logits(labels=y, logits=logits)
        loss_fn = tf.reduce_mean(xentropy)
    
    with tf.name_scope('optimizer'):
        optimizer = tf.train.GradientDescentOptimizer(0.01)
        train_op = optimizer.minimize(loss_fn)
    
    with tf.Session() as sess:
        sess.run(tf.global_variables_initializer())
        loss_val = sess.run(loss_fn, feed_dict={x:x_train, y:y_train})
        _ = sess.run(train_op, feed_dict={x:x_train, y:y_train})