Tf1-dense-network
import matplotlib as mpl
import matplotlib. pyplot as plt
% matplotlib inline
import numpy as np
import sklearn
import pandas as pd
import os
import sys
import time
import tensorflow as tf
from tensorflow import keras
print ( tf. __version__)
print ( sys. version_info)
for module in mpl, np , pd, sklearn, tf, keras:
print ( module. __name__, module. __version__)
1.15.0
sys.version_info(major=3, minor=7, micro=6, releaselevel='final', serial=0)
matplotlib 3.1.3
numpy 1.18.1
pandas 1.0.1
sklearn 0.22.1
tensorflow 1.15.0
tensorflow.python.keras.api._v1.keras 2.2.4-tf
fashion_mnist = keras. datasets. fashion_mnist
( x_train_all, y_train_all) , ( x_test, y_test) = fashion_mnist. load_data( )
x_valid, x_train = x_train_all[ : 5000 ] , x_train_all[ 5000 : ]
y_valid, y_train = y_train_all[ : 5000 ] , y_train_all[ 5000 : ]
print ( x_valid. shape, y_valid. shape)
print ( x_train. shape, y_train. shape)
print ( x_test. shape, y_test. shape)
(5000, 28, 28) (5000,)
(55000, 28, 28) (55000,)
(10000, 28, 28) (10000,)
from sklearn. preprocessing import StandardScaler
scaler = StandardScaler( )
x_train_scaled = scaler. fit_transform(
x_train. astype( np. float32) . reshape( - 1 , 1 ) ) . reshape( - 1 , 28 * 28 )
x_valid_scaled = scaler. transform(
x_valid. astype( np. float32) . reshape( - 1 , 1 ) ) . reshape( - 1 , 28 * 28 )
x_test_scaled = scaler. transform(
x_test. astype( np. float32) . reshape( - 1 , 1 ) ) . reshape( - 1 , 28 * 28 )
hidden_units = [ 100 , 100 ]
class_num = 10
x = tf. placeholder( tf. float32, [ None , 28 * 28 ] )
y = tf. placeholder( tf. int64, [ None ] )
input_for_next_layer = x
for hidden_unit in hidden_units:
input_for_next_layer = tf. layers. dense( input_for_next_layer,
hidden_unit,
activation= tf. nn. relu)
logits = tf. layers. dense( input_for_next_layer, class_num)
loss = tf. losses. sparse_softmax_cross_entropy( labels = y,
logits = logits)
prediction = tf. argmax( logits, 1 )
correct_prediction = tf. equal( prediction, y)
accuracy = tf. reduce_mean( tf. cast( correct_prediction, tf. float64) )
train_op = tf. train. AdamOptimizer( 1e - 3 ) . minimize( loss)
WARNING:tensorflow:From <ipython-input-4-40ee1aae8fd0>:19: dense (from tensorflow.python.layers.core) is deprecated and will be removed in a future version.
Instructions for updating:
Use keras.layers.Dense instead.
WARNING:tensorflow:From E:\Anaconda\anaconda\envs\tensorflow1\lib\site-packages\tensorflow_core\python\layers\core.py:187: Layer.apply (from tensorflow.python.keras.engine.base_layer) is deprecated and will be removed in a future version.
Instructions for updating:
Please use `layer.__call__` method instead.
WARNING:tensorflow:From E:\Anaconda\anaconda\envs\tensorflow1\lib\site-packages\tensorflow_core\python\ops\losses\losses_impl.py:121: where (from tensorflow.python.ops.array_ops) is deprecated and will be removed in a future version.
Instructions for updating:
Use tf.where in 2.0, which has the same broadcast rule as np.where
print ( x)
print ( logits)
Tensor("Placeholder:0", shape=(?, 784), dtype=float32)
Tensor("dense_2/BiasAdd:0", shape=(?, 10), dtype=float32)
init = tf. global_variables_initializer( )
batch_size = 20
epochs = 10
train_steps_per_epoch = x_train. shape[ 0 ] // batch_size
valid_steps = x_valid. shape[ 0 ] // batch_size
def eval_with_sess ( sess, x, y, accuracy, images, labels, batch_size) :
eval_steps = images. shape[ 0 ] // batch_size
eavl_accuracies = [ ]
for step in range ( eval_steps) :
batch_data = images[ step * batch_size: ( step+ 1 ) * batch_size]
batch_label = labels[ step * batch_size: ( step+ 1 ) * batch_size]
accuracy_val = sess. run( accuracy,
feed_dict = {
x: batch_data,
y: batch_label
} )
eavl_accuracies. append( accuracy_val)
return np. mean( eavl_accuracies)
with tf. Session( ) as sess:
sess. run( init)
for epoch in range ( epochs) :
for step in range ( train_steps_per_epoch) :
batch_data = x_train_scaled[
step * batch_size: ( step+ 1 ) * batch_size]
batch_label = y_train[
step * batch_size: ( step+ 1 ) * batch_size]
loss_val, accuracy_val, _ = sess. run( [ loss, accuracy, train_op] ,
feed_dict = {
x: batch_data,
y: batch_label
} )
print ( '\r[Train] epoch: %d, step:%d, loss: %3.5f, accuracy: %2.2f'
% ( epoch, step, loss_val, accuracy_val) , end= "" )
valid_accuracy = eval_with_sess( sess, x, y, accuracy,
x_valid_scaled, y_valid, batch_size)
print ( "\t[Valid] acc: %2.2f" % ( valid_accuracy) )
[Train] epoch: 0, step:2749, loss: 0.25137, accuracy: 0.90 [Valid] acc: 0.86
[Train] epoch: 1, step:2749, loss: 0.24022, accuracy: 0.90 [Valid] acc: 0.87
[Train] epoch: 2, step:2749, loss: 0.20952, accuracy: 0.90 [Valid] acc: 0.88
[Train] epoch: 3, step:2749, loss: 0.16674, accuracy: 0.90 [Valid] acc: 0.88
[Train] epoch: 4, step:2680, loss: 0.65273, accuracy: 0.85[Train] epoch: 4, step:2749, loss: 0.13731, accuracy: 0.90 [Valid] acc: 0.88
[Train] epoch: 5, step:2749, loss: 0.22307, accuracy: 0.95 [Valid] acc: 0.88
[Train] epoch: 6, step:2749, loss: 0.16866, accuracy: 0.95 [Valid] acc: 0.88
[Train] epoch: 7, step:2749, loss: 0.15522, accuracy: 0.95 [Valid] acc: 0.88
[Train] epoch: 8, step:2749, loss: 0.10591, accuracy: 0.95 [Valid] acc: 0.88
[Train] epoch: 9, step:2749, loss: 0.14000, accuracy: 0.90 [Valid] acc: 0.88