I have a machine learning model designed as follows:
	model = nn.Sequential(OrderedDict([
	                                       ('fc1', nn.Linear(631, 500)),
	                                        #('drop1', nn.Dropout(0.5)),
	                                       ('relu1', nn.ReLU(inplace=True)),

	                                       #('fc1B', nn.Linear(1000, 2000)),
	                                        #('drop1', nn.Dropout(0.5)),
	                                       #('relu1B', nn.ReLU(inplace=True)),

	                                       #('fc1C', nn.Linear(2000, 400)),
	                                       # ('drop1C', nn.Dropout(0.5)),
	                                       #('relu1C', nn.ReLU(inplace=True)),


	                                       ('fc2', nn.Linear(500, 400)),
	                                        #('drop2', nn.Dropout(0.5)),
	                                       ('relu2', nn.ReLU(inplace=True)),

	                                       ('fc2B', nn.Linear(400, 300)),
	                                        #('drop2', nn.Dropout(0.5)),
	                                       ('relu2B', nn.ReLU(inplace=True)),


											('fc3', nn.Linear(300, 200)),
											#('drop3', nn.Dropout(0.5)),
											('relu3', nn.ReLU(inplace=True)),

											('fc4', nn.Linear(200, 100)),
											#('drop4', nn.Dropout(0.5)),
											('relu4', nn.ReLU(inplace=True)),

											('fc4B', nn.Linear(100, 50)),
											#('drop4', nn.Dropout(0.5)),
											('relu4B', nn.ReLU(inplace=True)),

											('fc5', nn.Linear(50, 25)),
											#('drop5', nn.Dropout(0.5)),
											('relu5', nn.ReLU(inplace=True)),

											('fc5B', nn.Linear(25, 12)),
											#('drop5', nn.Dropout(0.5)),
											('relu5B', nn.ReLU(inplace=True)),

	                                        ('fc6', nn.Linear(12, 3)),
	                                        ('output', nn.LogSoftmax(dim=1))]))

It’s a very basic model.  My crieterion and optimizer are as follows:
criterion = nn.CrossEntropyLoss()

optimizer = optim.SGD(model.parameters(), lr = ext_learning_rate)

I have learning rates from .00025 (and smaller) to the unreasonable rate of 100.   Still my results vary wildly.  Some have accuracy rates of up to 82.5% and some have accuracy rates of 1.4%.  The results vary wildly.  This is not my first model as I have tried others with less layers, etc.
Any advice on how to improve this model?  And a broader question, does anyone know how I learn to build better models generally through a more systematic approach?