 Now, in exercise four, we're actually getting down to the business of building an artificial neural network. This step is a little disconcerting because everything is still so unstructured. We don't have any classes, we don't have any methods to call on. We are having to create from scratch as we go. We know that we want our neural network to be able to do two things. We want it to be able to get trained on our data set and then evaluate itself on our data set, on the evaluation set. We'll also need to just go through this step of creating it, initializing it. So with this in mind, this tells us enough to get started. We're building in the next level down from our very top level. We'll still leave a lot of T's uncrossed and I's undotted, but that's okay. This gives us a clear direction to move forward with. So the very first thing we do, we create a directory nn underscore framework. Within that directory, create a double underscore init double underscore dot pi file and it's totally empty. We can add stuff into it, we won't hear, we don't need it, but this now is a Python package. We can add other dot pi files in this directory and they'll be treated as part of that package. So the first thing we'll do is we'll create a file called framework dot pi, a module within this package. This is going to be our top level object in our framework. I should say that within this module, we'll create our top level object, which is the artificial neural network, which will abbreviate as ANN, a class. Within that class, we'll stub out two methods, train and evaluate. Stubbing out just means we will write the definition for them, but we won't actually fill them in yet because we don't know what they are going to do exactly. We also write an init function, an initialization function that's called anytime we create or instantiate a new ANN object. For now, we'll assume that we're going to pass it some information about the model. We're not specifying what that looks like at this point, but it'll just be, we'll call it layers, it'll be information about the layers and how they're shaped and how they're laid out. The train and evaluate methods of this class will take as inputs the data sets. So in the first case, a training data set, and in the second case, an evaluation data set, but we will just say pass. Don't do anything, just move on. This is the stub, which then we can go through and substitute that pass with some actual code later. Then we can go back, having this stub, we can go back to our run framework script. We can import it in line two, and now we have a framework, and now we can make use of all of these fake functions we just created. We can instantiate a new model, call it an autoencoder. We can train it on our training set, which we've loaded, and we can evaluate it on our evaluation set. This is the main functionality of what we're going to want our neural network to do, and at the very highest level, we've essentially done it, which is pretty cool. As I say, the rest is just details. The next 25 exercises, we'll take care of that.