diff --git a/C1_Browser-based-TF-JS/W1/assignment/C1_W1_Assignment.html b/C1_Browser-based-TF-JS/W1/assignment/C1_W1_Assignment.html index 023c6143..9a29406d 100755 --- a/C1_Browser-based-TF-JS/W1/assignment/C1_W1_Assignment.html +++ b/C1_Browser-based-TF-JS/W1/assignment/C1_W1_Assignment.html @@ -11,17 +11,25 @@ // HINT: Remember that you are trying to build a classifier that // can predict from the data whether the diagnosis is malignant or benign. const trainingData = tf.data.csv(trainingUrl, { - - // YOUR CODE HERE - + columnConfigs: { + 'diagnosis': { + isLabel: true + } + } }); + // Convert the training data into arrays in the space below. // Note: In this case, the labels are integers, not strings. // Therefore, there is no need to convert string labels into // a one-hot encoded array of label values like we did in the // Iris dataset example. - const convertedTrainingData = // YOUR CODE HERE + const convertedTrainingData = trainingData.map(({xs, ys}) => { + return { + xs: Object.values(xs), + ys: Object.values(ys) + }; + }).batch(32); const testingUrl = '/data/wdbc-test.csv'; @@ -30,9 +38,11 @@ // HINT: Remember that you are trying to build a classifier that // can predict from the data whether the diagnosis is malignant or benign. const testingData = tf.data.csv(testingUrl, { - - // YOUR CODE HERE - + columnConfigs: { + 'diagnosis': { + isLabel: true + } + } }); // Convert the testing data into arrays in the space below. @@ -40,13 +50,17 @@ // Therefore, there is no need to convert string labels into // a one-hot encoded array of label values like we did in the // Iris dataset example. - const convertedTestingData = // YOUR CODE HERE + const convertedTestingData = testingData.map(({xs, ys}) => { + return { + xs: Object.values(xs), + ys: Object.values(ys) + }; + }).batch(32); - // Specify the number of features in the space below. // HINT: You can get the number of features from the number of columns // and the number of labels in the training data. - const numOfFeatures = // YOUR CODE HERE + const numOfFeatures = 30; // In the space below create a neural network that predicts 1 if the diagnosis is malignant @@ -58,16 +72,29 @@ // using ReLu activation functions where applicable. For this dataset only a few // hidden layers should be enough to get a high accuracy. const model = tf.sequential(); - - // YOUR CODE HERE - + model.add(tf.layers.dense({ + inputShape: [numOfFeatures], + units: 16, + activation: 'relu' + })); + model.add(tf.layers.dense({ + units: 8, + activation: 'relu' + })); + model.add(tf.layers.dense({ + units: 1, + activation: 'sigmoid' + })); // Compile the model using the binaryCrossentropy loss, // the rmsprop optimizer, and accuracy for your metrics. - model.compile(// YOUR CODE HERE); - - + model.compile({ + loss: 'binaryCrossentropy', + optimizer: 'rmsprop', + metrics: ['accuracy'] + }); + await model.fitDataset(convertedTrainingData, {epochs:100, validationData: convertedTestingData, @@ -82,4 +109,4 @@ - \ No newline at end of file +