📑 TensorFlow Workout 01
Code Modules
xxxxxxxxxx
!python3 -m pip install tensorflow_hub \
--user --quiet --no-warn-script-location
#!python3 -m pip install tensorflow==2.6.0 \
#--user --quiet --no-warn-script-location
path='/home/sc_work/.sage/local/lib/python3.9/site-packages'
import sys,warnings; sys.path.append(path)
warnings.filterwarnings('ignore')
import tensorflow_hub as th,tensorflow as tf
import numpy as np,pandas as pd,pylab as pl,h5py,urllib
import tensorflow.keras.callbacks as tkc,\
tensorflow.keras.utils as tku,tensorflow.keras.layers as tkl
Image Data
xxxxxxxxxx
path='https://raw.githubusercontent.com/'+\
'OlgaBelitskaya/data_kitchen/main/'
zf='Flowers128.h5'
input_file=urllib.request.urlopen(path+zf)
output_file=open(zf,'wb')
output_file.write(input_file.read())
output_file.close(); input_file.close()
with h5py.File(zf,'r') as f:
keys=list(f.keys())
pretty_print(html(
'<p style="color:darkorange">'+\
'file keys: '+', '.join(keys)+'</p>'))
images=np.array(f[keys[0]])
labels=np.array(f[keys[1]])
names=[el.decode('utf-8')for el in f[keys[2]]]
f.close()
N=labels.shape[0]; n=int(.1*N); shuffle_ids=np.arange(N)
np.random.RandomState(12).shuffle(shuffle_ids)
images=images[shuffle_ids]; labels=labels[shuffle_ids]
x_test,x_valid,x_train=images[:n],images[n:2*n],images[2*n:]
y_test,y_valid,y_train=labels[:n],labels[n:2*n],labels[2*n:]
df=pd.DataFrame(
[[x_train.shape,x_valid.shape,x_test.shape],
[x_train.dtype,x_valid.dtype,x_test.dtype],
[y_train.shape,y_valid.shape,y_test.shape],
[y_train.dtype,y_valid.dtype,y_test.dtype]],
columns=['train','valid','test'],
index=['image shape','image type',
'label shape','label type'])
fig=pl.figure(figsize=(6,4)); n=randint(1,100)
for i in range(n,n+6):
ax=fig.add_subplot(2,3,i-n+1,xticks=[],yticks=[])
ax.set_title(
names[labels[i]],color='slategray',
fontdict={'fontsize':'large'})
ax.imshow((images[i]))
pl.tight_layout(); pl.show(); display(df)
Helpful Functions
xxxxxxxxxx
def premodel(pix,den,mh,lbl,activ,loss):
model=tf.keras.Sequential([
tkl.Input((pix,pix,int(3)),name='input'),
th.KerasLayer(mh,trainable=True),
tkl.Flatten(),
tkl.Dense(den,activation='relu'),
tkl.Dropout(rate=.5),
tkl.Dense(lbl,activation=activ)])
model.compile(optimizer='adam',metrics=['accuracy'],loss=loss)
return model
def cb(fw):
early_stopping=tkc.EarlyStopping(
monitor='val_loss',patience=int(20),verbose=int(2))
checkpointer=tkc.ModelCheckpoint(
filepath=fw,verbose=int(2),save_weights_only=True,
monitor='val_accuracy',mode='max',save_best_only=True)
lr_reduction=tkc.ReduceLROnPlateau(
monitor='val_loss',verbose=int(2),
patience=int(5),factor=.8)
return [checkpointer,early_stopping,lr_reduction]
Model Training
xxxxxxxxxx
fw='/tmp/checkpoint'
[handle_base,pixels]=['mobilenet_v2_100_128',int(128)]
mhandle='https://tfhub.dev/google/imagenet/{}/classification/4'\
.format(handle_base)
model=premodel(pixels,int(512),mhandle,int(20),
'softmax','sparse_categorical_crossentropy')
history=model.fit(x=x_train,y=y_train,batch_size=int(32),
epochs=int(1),callbacks=cb(fw),verbose=int(0),
validation_data=(x_valid,y_valid))
Model Evaluation
xxxxxxxxxx
model.load_weights(fw)
model.evaluate(x_test,y_test,verbose=int(0))
No comments:
Post a Comment