Files
@ 5f42b982809c
Branch filter:
Location: OneEye/exp/kerokero/train.py
5f42b982809c
3.2 KiB
text/x-python
deferred data preprocessing saving space
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 | import os
import math
from time import time
import argparse
import logging as log
import numpy as np
from keras.layers import Conv2D,Dropout,Dense,Flatten,MaxPooling2D,BatchNormalization,GlobalAveragePooling2D,Reshape
from keras.models import Sequential,load_model
from keras.callbacks import TensorBoard,ModelCheckpoint
import keras.losses
import keras.metrics
import config as cfg
from k_util import averageDistance,generateData
keras.losses.averageDistance=averageDistance
keras.metrics.averageDistance=averageDistance
parser=argparse.ArgumentParser()
parser.add_argument("data")
parser.add_argument("--load_model")
parser.add_argument("--save_model",default="/tmp/gogo-{0:03}.h5")
parser.add_argument("--epochs",type=int,default=100)
parser.add_argument("--initial_epoch",type=int,default=0)
parser.add_argument("--log_dir",default="/tmp/tflogs")
args=parser.parse_args()
def createFullyConnected():
model=Sequential([
Flatten(input_shape=(224,224)),
Dense(128, activation="relu"),
Dropout(0.1),
Dense(64, activation="relu"),
Dense(8)
])
model.compile(
optimizer='adam',
loss='mse',
metrics=['mae','accuracy']
)
return model
def createCNN():
model=Sequential()
model.add(BatchNormalization(input_shape=(224,224,1)))
model.add(Conv2D(24,(5,5),padding="same",kernel_initializer="he_normal",activation="relu",input_shape=(224,224,1),data_format="channels_last"))
model.add(MaxPooling2D(pool_size=(2,2),strides=(2,2),padding="valid"))
model.add(Conv2D(36,(5,5),activation="relu"))
model.add(MaxPooling2D(pool_size=(2,2),strides=(2,2),padding="valid"))
model.add(Conv2D(48,(5,5),activation="relu"))
model.add(MaxPooling2D(pool_size=(2,2),strides=(2,2),padding="valid"))
model.add(Conv2D(64,(3,3),activation="relu"))
model.add(MaxPooling2D(pool_size=(2,2),strides=(2,2),padding="valid"))
model.add(Conv2D(64,(3,3),activation="relu"))
model.add(GlobalAveragePooling2D())
model.add(Dense(500,activation="relu"))
model.add(Dense(90,activation="relu"))
model.add(Dense(8))
model.add(Reshape((4,2)))
model.compile(optimizer="rmsprop",loss=averageDistance,metrics=["mae","accuracy"])
return model
model=createCNN()
if args.load_model:
model=load_model(args.load_model)
log.info("loading data...")
with np.load(args.data) as data:
trainImages=(np.float32(data["trainImages"])/128-1).reshape((-1,224,224,1))
trainLabels=data["trainLabels"].reshape((-1,4,2))
testImages=(np.float32(data["testImages"])/128-1).reshape((-1,224,224,1))
testLabels=data["testLabels"].reshape((-1,4,2))
log.info("done")
n=len(trainImages)
k=round(n*0.9)
n_=n-k
(trainImages,valImages)=(np.float32(trainImages[:k]),np.float32(trainImages[k:]))
(trainLabels,valLabels)=(np.float32(trainLabels[:k]),np.float32(trainLabels[k:]))
tensorboard=TensorBoard(log_dir=os.path.join(args.log_dir,"{}".format(time())))
checkpoint=ModelCheckpoint(args.save_model,monitor="val_loss",period=10)
model.fit_generator(
generateData(trainImages,trainLabels,batch_size=20),
epochs=args.epochs,
initial_epoch=args.initial_epoch,
steps_per_epoch=math.ceil(n_/20),
validation_data=generateData(valImages,valLabels,batch_size=20),
validation_steps=math.ceil(k/20),
callbacks=[tensorboard,checkpoint]
)
log.info(model.evaluate(testImages,testLabels))
|