Training settings
Please provide a valid training processor option
Neural network architecture
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, InputLayer, Dropout, Conv1D, Conv2D, Flatten, Reshape, MaxPooling1D, MaxPooling2D, AveragePooling2D, BatchNormalization, Permute, ReLU, Softmax
from tensorflow.keras.optimizers.legacy import Adam
EPOCHS = 300
LEARNING_RATE = args.learning_rate or 0.0005
# If True, non-deterministic functions (e.g. shuffling batches) are not used.
# This is False by default.
ENSURE_DETERMINISM = args.ensure_determinism
# this controls the batch size, or you can manipulate the tf.data.Dataset objects yourself
BATCH_SIZE = args.batch_size or 32
if not ENSURE_DETERMINISM:
train_dataset = train_dataset.shuffle(buffer_size=BATCH_SIZE*4)
train_dataset=train_dataset.batch(BATCH_SIZE, drop_remainder=False)
validation_dataset = validation_dataset.batch(BATCH_SIZE, drop_remainder=False)
import tensorflow as tf
from tensorflow.keras import layers, models
from tensorflow.keras.regularizers import l2
# Assuming you're using a regularization factor of 0.001 for L2 regularization
reg = None
def simplified_residual_block(x, filters, kernel_size=3, stride=1, dropout_rate=0.0):
# Shortcut adjustment if needed
shortcut = x
if stride != 1 or x.shape[-1] != filters:
shortcut = layers.Conv1D(filters, 1, strides=stride, padding='same', use_bias=False, kernel_regularizer=reg)(shortcut)
shortcut = layers.BatchNormalization()(shortcut)
# First convolution
x = layers.Conv1D(filters, kernel_size=kernel_size, strides=stride, padding='same', use_bias=False, kernel_regularizer=reg)(x)
x = layers.BatchNormalization()(x)
x = layers.Activation('relu')(x)
if dropout_rate > 0:
x = layers.Dropout(dropout_rate)(x)
# Add shortcut and final activation
x = layers.add([x, shortcut])
x = layers.Activation('relu')(x)
return x
def build_small_resnet_18(input_shape=(1800, 1), num_classes=10, dropout_rate=0.0):
inputs = tf.keras.Input(shape=input_shape)
reshaped_inputs = tf.keras.layers.Reshape((300, 6))(inputs) # Reshape to (300, 6)
# Initial Convolution
x = layers.Conv1D(16, kernel_size=7, strides=2, padding='same', use_bias=False)(reshaped_inputs)
x = layers.BatchNormalization()(x)
x = layers.Activation('relu')(x)
x = layers.MaxPooling1D(pool_size=3, strides=2, padding='same')(x)
# Simplified Residual blocks with fewer filters
x = simplified_residual_block(x, 32, dropout_rate=dropout_rate)
x = simplified_residual_block(x, 64, stride=2, dropout_rate=dropout_rate)
x = simplified_residual_block(x, 128, stride=2, dropout_rate=dropout_rate)
x = simplified_residual_block(x, 256, stride=2, dropout_rate=dropout_rate)
# Global Average Pooling and Output
x = layers.GlobalAveragePooling1D()(x)
outputs = layers.Dense(num_classes, activation='softmax', kernel_regularizer=reg)(x)
model = models.Model(inputs, outputs)
return model
def build_larger_resnet_18(input_shape=(1800, 1), num_classes=10, dropout_rate=0.0):
inputs = tf.keras.Input(shape=input_shape)
reshaped_inputs = tf.keras.layers.Reshape((300, 6))(inputs) # Reshape to (300, 6)
# Initial Convolution
x = layers.Conv1D(32, kernel_size=7, strides=2, padding='same', use_bias=False)(reshaped_inputs)
x = layers.BatchNormalization()(x)
x = layers.Activation('relu')(x)
x = layers.MaxPooling1D(pool_size=3, strides=2, padding='same')(x)
# Simplified Residual blocks with increased filters
x = simplified_residual_block(x, 32, dropout_rate=dropout_rate) # Additional block
# x = simplified_residual_block(x, 32, dropout_rate=dropout_rate)
x = simplified_residual_block(x, 64, stride=2, dropout_rate=dropout_rate)
# x = simplified_residual_block(x, 64, dropout_rate=dropout_rate) # Additional block
# x = simplified_residual_block(x, 64, dropout_rate=dropout_rate)
# x = simplified_residual_block(x, 128, stride=2, dropout_rate=dropout_rate)
# x = simplified_residual_block(x, 128, dropout_rate=dropout_rate) # Additional block
# x = simplified_residual_block(x, 128, dropout_rate=dropout_rate)
# x = simplified_residual_block(x, 256, stride=2, dropout_rate=dropout_rate)
# x = simplified_residual_block(x, 256, dropout_rate=dropout_rate) # Additional block
# Global Average Pooling and Output
x = layers.GlobalAveragePooling1D()(x)
outputs = layers.Dense(num_classes, activation='softmax', kernel_regularizer=reg)(x)
model = models.Model(inputs, outputs)
return model
# Build and summarize the smaller model
model = build_larger_resnet_18(input_shape=(1800, 1), num_classes=10, dropout_rate=0.5)
# model.summary()
# this controls the learning rate
opt = Adam(learning_rate=LEARNING_RATE, beta_1=0.9, beta_2=0.999)
callbacks.append(BatchLoggerCallback(BATCH_SIZE, train_sample_count, epochs=EPOCHS, ensure_determinism=ENSURE_DETERMINISM))
# train the neural network
model.compile(loss='categorical_crossentropy', optimizer=opt, metrics=['accuracy'])
model.fit(train_dataset, epochs=EPOCHS, validation_data=validation_dataset, verbose=2, callbacks=callbacks)
# Use this flag to disable per-channel quantization for a model.
# This can reduce RAM usage for convolutional models, but may have
# an impact on accuracy.
disable_per_channel_quantization = False
Input layer (1,800 features)
Select a scoring function
Dense layer (20 neurons)
Dense layer (10 neurons)
Output layer (10 classes)
Model
Model version: