-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathModel.py
135 lines (115 loc) · 6.74 KB
/
Model.py
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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
# Importig required Libaries
from keras.callbacks import TensorBoard
from keras.layers import Activation, Dense, Flatten, Cropping2D, Conv2D
from keras.models import Sequential
from keras.preprocessing.image import ImageDataGenerator
from keras.layers import Lambda
from keras.models import model_from_json
def Pattern_Recognion_Model_API(X_train,y_train):
'''
Pattern Recognition model with the use Functional API method consists of 24 Sequential layers
6 Convolutional layers followed by relu activation layer.
5 Fully connected layers followed bye relu activation layer.
Convolutional layers plays important role in segregating all lane curve extractions and curvation associated information.
Fully connected layers plays important role in reducing network size layer by layer in extracting curvature of lanes in taking the steering angle prediction
Loss
----
mean squared error loss is considered in optimizing the model performance
Optimizer
--------
Adam optimizer is considered in changing the learning rate to converging Neural network in getting high performance in prediction
default learning rate of 0.9 to 0.999 increment of optimization with the step of 0.001 is considered
keras.optimizers.Adam(lr=0.001, beta_1=0.9, beta_2=0.999, epsilon=None, decay=0.0, amsgrad=False)
'''
X_input = Input(shape=X_train.shape, name='img_in')
#X = Cropping2D(cropping=((70, 25), (0, 0)))(X_input)
#X = Lambda(lambda image: ktf.image.resize_images(image, (80, 200)))(X)
X = Lambda(lambda x: (x / 255.0) - 0.5)(X_input)
X = Conv2D(filters=6, kernel_size=(3, 3), strides=(1, 1), padding='valid', dilation_rate=(1, 1), use_bias=True,
kernel_initializer='glorot_uniform', bias_initializer='zeros')(X)
X = Activation('relu')(X)
X = Conv2D(filters=6, kernel_size=(5, 5), strides=(2, 2), padding='valid', dilation_rate=(1, 1), use_bias=True,
kernel_initializer='glorot_uniform', bias_initializer='zeros')(X)
X = Activation('relu')(X)
# X = Conv2D(filters=6, kernel_size=(5, 5), strides=(2, 2), padding='valid', dilation_rate=(1, 1), use_bias=True,
# kernel_initializer='glorot_uniform', bias_initializer='zeros')(X)
# X = Activation('relu')(X)
X = Conv2D(filters=16, kernel_size=(5, 5), strides=(2, 2), padding='valid', dilation_rate=(1, 1), use_bias=True,
kernel_initializer='glorot_uniform', bias_initializer='zeros')(X)
X = Activation('relu')(X)
X = Conv2D(filters=16, kernel_size=(3, 3), strides=(1, 1), padding='valid', dilation_rate=(1, 1), use_bias=True,
kernel_initializer='glorot_uniform', bias_initializer='zeros')(X)
X = Activation('relu')(X)
X = Conv2D(filters=32,kernel_size=(3, 3), strides=(1, 1), padding='valid', dilation_rate=(1, 1), use_bias=True,
kernel_initializer='glorot_uniform', bias_initializer='zeros')(X)
X = Activation('relu')(X)
# Fully connected
X = Flatten()(X)
# model.add(Dropout(0.35))
X = Dense(units=1164)(X)
X = Activation('relu')(X)
X = Dense(units=100)(X)
X = Activation('relu')(X)
X = Dense(units=50)(X)
X = Activation('relu')(X)
X = Dense(units=10)(X)
X = Activation('relu')(X)
X = Dense(units=1)(X)
model=Model(inputs=X_input, outputs=X, name='Convolve')
model.compile(optimizer='adam',loss='mean_squared_error',metrics = ['mse'])
return model
def PatternRecognitionModel(input_shape):
'''
Pattern Recognition model consists of 24 Sequential layers
6 Convolutional layers followed by relu activation layer.
5 Fully connected layers followed bye relu activation layer.
Convolutional layers plays important role in segregating all lane curve extractions and curvation associated information.
Fully connected layers plays important role in reducing network size layer by layer in extracting curvature of lanes in taking the steering angle prediction
Loss
----
mean squared error loss is considered in optimizing the model performance
Optimizer
--------
Adam optimizer is considered in changing the learning rate to converging Neural network in getting high performance in prediction
default learning rate of 0.9 to 0.999 increment of optimization with the step of 0.001 is considered
keras.optimizers.Adam(lr=0.001, beta_1=0.9, beta_2=0.999, epsilon=None, decay=0.0, amsgrad=False)
'''
# Model
model = Sequential()
# Convolutional
model.add(Cropping2D(cropping=((5, 5), (0, 0)), input_shape=input_shape))
# Lambda(lambda image: ktf.image.resize_images(image, (80, 200)))
model.add(Lambda(lambda x: (x / 255.0) - 0.5))
model.add(Conv2D(filters=3, kernel_size=(5, 5), strides=(2, 2), padding='valid', dilation_rate=(1, 1), use_bias=True,
kernel_initializer='glorot_uniform', bias_initializer='zeros'))
model.add(Activation('relu'))
model.add(Conv2D(filters=3, kernel_size=(5, 5), strides=(2, 2), padding='valid', dilation_rate=(1, 1), use_bias=True,
kernel_initializer='glorot_uniform', bias_initializer='zeros'))
model.add(Activation('relu'))
model.add(Conv2D(filters=8, kernel_size=(3, 3), strides=(2, 2), padding='valid', dilation_rate=(1, 1), use_bias=True,
kernel_initializer='glorot_uniform', bias_initializer='zeros'))
model.add(Conv2D(filters=16, kernel_size=(5, 5), strides=(2, 2), padding='valid', dilation_rate=(1, 1), use_bias=True,
kernel_initializer='glorot_uniform', bias_initializer='zeros'))
model.add(Activation('relu'))
model.add(Conv2D(filters=16, kernel_size=(5, 5), strides=(2, 2), padding='valid', dilation_rate=(1, 1), use_bias=True,
kernel_initializer='glorot_uniform', bias_initializer='zeros'))
model.add(Activation('relu'))
model.add(Conv2D(filters=32, kernel_size=(3, 3), strides=(1, 1), padding='valid', dilation_rate=(1, 1), use_bias=True,
kernel_initializer='glorot_uniform', bias_initializer='zeros'))
model.add(Activation('relu'))
model.add(Conv2D(filters=16, kernel_size=(3, 3), strides=(1, 1), padding='valid', dilation_rate=(1, 1),use_bias=True,
kernel_initializer='glorot_uniform',bias_initializer='zeros'))
model.add(Activation('relu'))
# Fully connected
model.add(Flatten())
model.add(Dense(units=1164))
model.add(Activation('relu'))
model.add(Dense(units=100))
model.add(Activation('relu'))
model.add(Dense(units=50))
model.add(Activation('relu'))
model.add(Dense(units=10))
model.add(Activation('relu'))
model.add(Dense(units=1))
model.compile(loss='mean_squared_error', optimizer='Adam', metrics=['mae'])
return model