-
Notifications
You must be signed in to change notification settings - Fork 7
Expand file tree
/
Copy pathtrain.py
More file actions
74 lines (65 loc) · 2.17 KB
/
Copy pathtrain.py
File metadata and controls
74 lines (65 loc) · 2.17 KB
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
import cv2
import csv
import random
import numpy as np
import tensorflow as tf
encoding = '123456789'
labels_file = 'labels.csv'
img_list = []
label_list = []
with open(labels_file, newline='') as csvfile:
reader = csv.DictReader(csvfile)
fieldnames = reader.fieldnames
for row in reader:
img_list.append(row[fieldnames[0]])
label_list.append(encoding.index(row[fieldnames[1]]))
items=[]
for i in range(len(img_list)):
items.append(i)
X = []
y = []
for i in random.sample(items,len(img_list)):
img = cv2.imread(img_list[i], 0)
img = tf.keras.preprocessing.image.img_to_array(img)
X.append(img)
y.append(label_list[i])
X = 1 - np.array(X).astype(float)/255 # invert and scale
y = np.array(y).astype(float)
model = tf.keras.Sequential()
model.add(tf.keras.layers.Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=(24, 31, 1)))
model.add(tf.keras.layers.BatchNormalization())
model.add(tf.keras.layers.MaxPooling2D(pool_size=(2, 2)))
model.add(tf.keras.layers.Conv2D(64, (3, 3), activation='relu'))
model.add(tf.keras.layers.BatchNormalization())
model.add(tf.keras.layers.MaxPooling2D(pool_size=(2, 2)))
model.add(tf.keras.layers.Conv2D(128, (3, 3), activation='relu'))
model.add(tf.keras.layers.BatchNormalization())
model.add(tf.keras.layers.Flatten())
model.add(tf.keras.layers.Dropout(rate=0.25))
model.add(tf.keras.layers.Dense(128, activation='relu'))
model.add(tf.keras.layers.Dropout(rate=0.5))
model.add(tf.keras.layers.Dense(9, activation='softmax'))
print(model.summary())
initial_learning_rate = 1e-3
lr_schedule = tf.keras.optimizers.schedules.ExponentialDecay(
initial_learning_rate,
decay_steps=100000,
decay_rate=0.9,
)
model.compile(
loss=tf.keras.losses.SparseCategoricalCrossentropy(),
optimizer=tf.keras.optimizers.Adam(learning_rate=lr_schedule),
metrics=[tf.keras.metrics.SparseCategoricalAccuracy()]
)
batch_size = 32
epochs = 80
model.fit(
X,
y,
batch_size = batch_size,
epochs = epochs,
validation_split = 0.2,
callbacks = [tf.keras.callbacks.EarlyStopping(monitor='val_loss', patience=5)]
)
import tensorflowjs as tfjs
tfjs.converters.save_keras_model(model, 'outputs/model_tfjs')