{
  "id": 106936,
  "title": "Keras Training on Old Data ",
  "url": "/competitions/aptos2019-blindness-detection/discussion/106936",
  "author_name": "",
  "post_date": "2019-09-01T00:23:36.702900300Z",
  "votes": 1,
  "comment_count": 1,
  "views": 0,
  "content": "<p>Hi,  I am training my model on old data - regression. I am using flow_from_dataframe method of ImageDataGenerator. I don't know if I am right, but I am using class_mode = 'other' in frlo_from_dataframe. I have validation kappa callback, but for the regression model, it always returns zero .I don't understand where I am going wrong. Please help.  Below is the code I am using for validation kappa callback.  Before training begins, I already load the validation images in X_val. </p>\n\n<p>def get_preds(y_hat):</p>\n\n<pre><code>coef=[0.5,1.5,2.5,3.5]\nif coef[0]&amp;gt;=y_hat:\n    y_hat=0\nelif coef[1]&amp;gt;=y_hat:\n    y_hat=1\nelif coef[2]&amp;gt;=y_hat:\n    y_hat=2\nelif coef[3]&amp;gt;=y_hat:\n    y_hat=3\nelse:\n    y_hat=4\n</code></pre>\n\n<p>class Metrics(Callback):</p>\n\n<pre><code>def on_train_begin(self, logs={}):\n\n    self.val_kappas = []\n\ndef on_epoch_end(self, epoch, logs={}):\n\n    X_val, y_val = self.validation_data[:2]\n\n\n    y_pred = self.model.predict(X_val)\n\n    for i in len(y_pred):\n        y_pred[i] = get_preds(y_pred[i])\n\n\n    _val_kappa = cohen_kappa_score(\n        y_val,\n        y_pred, \n        weights='quadratic'\n    )\n\n    self.val_kappas.append(_val_kappa)\n\n    print(f\"val_kappa: {_val_kappa:.4f}\")\n\n    if _val_kappa == max(self.val_kappas):\n        print(\"Validation Kappa has improved. Saving model.\")\n        model.save_weights('model.h5')\n        model_json = model.to_json()\n        with open('model.json', \"w\") as json_file:\n            json_file.write(model_json)\n        json_file.close()\n\n    return\n</code></pre>",
  "messages": [
    {
      "id": "614714",
      "postDate": "09/01/2019 00:23:36",
      "content": "<p>Hi,  I am training my model on old data - regression. I am using flow_from_dataframe method of ImageDataGenerator. I don't know if I am right, but I am using class_mode = 'other' in frlo_from_dataframe. I have validation kappa callback, but for the regression model, it always returns zero .I don't understand where I am going wrong. Please help.  Below is the code I am using for validation kappa callback.  Before training begins, I already load the validation images in X_val. </p>\n\n<p>def get_preds(y_hat):</p>\n\n<pre><code>coef=[0.5,1.5,2.5,3.5]\nif coef[0]&amp;gt;=y_hat:\n    y_hat=0\nelif coef[1]&amp;gt;=y_hat:\n    y_hat=1\nelif coef[2]&amp;gt;=y_hat:\n    y_hat=2\nelif coef[3]&amp;gt;=y_hat:\n    y_hat=3\nelse:\n    y_hat=4\n</code></pre>\n\n<p>class Metrics(Callback):</p>\n\n<pre><code>def on_train_begin(self, logs={}):\n\n    self.val_kappas = []\n\ndef on_epoch_end(self, epoch, logs={}):\n\n    X_val, y_val = self.validation_data[:2]\n\n\n    y_pred = self.model.predict(X_val)\n\n    for i in len(y_pred):\n        y_pred[i] = get_preds(y_pred[i])\n\n\n    _val_kappa = cohen_kappa_score(\n        y_val,\n        y_pred, \n        weights='quadratic'\n    )\n\n    self.val_kappas.append(_val_kappa)\n\n    print(f\"val_kappa: {_val_kappa:.4f}\")\n\n    if _val_kappa == max(self.val_kappas):\n        print(\"Validation Kappa has improved. Saving model.\")\n        model.save_weights('model.h5')\n        model_json = model.to_json()\n        with open('model.json', \"w\") as json_file:\n            json_file.write(model_json)\n        json_file.close()\n\n    return\n</code></pre>",
      "rawMarkdown": "Hi,  I am training my model on old data - regression. I am using flow_from_dataframe method of ImageDataGenerator. I don't know if I am right, but I am using class_mode = 'other' in frlo_from_dataframe. I have validation kappa callback, but for the regression model, it always returns zero .I don't understand where I am going wrong. Please help.  Below is the code I am using for validation kappa callback.  Before training begins, I already load the validation images in X_val. \n\n\ndef get_preds(y_hat):\n\n    coef=[0.5,1.5,2.5,3.5]\n    if coef[0]&gt;=y_hat:\n        y_hat=0\n    elif coef[1]&gt;=y_hat:\n        y_hat=1\n    elif coef[2]&gt;=y_hat:\n        y_hat=2\n    elif coef[3]&gt;=y_hat:\n        y_hat=3\n    else:\n        y_hat=4\n            \n\n\nclass Metrics(Callback):\n\n    def on_train_begin(self, logs={}):\n\n        self.val_kappas = []\n\n    def on_epoch_end(self, epoch, logs={}):\n\n        X_val, y_val = self.validation_data[:2]\n\n        \n        y_pred = self.model.predict(X_val)\n\n        for i in len(y_pred):\n            y_pred[i] = get_preds(y_pred[i])\n            \n        \n        _val_kappa = cohen_kappa_score(\n            y_val,\n            y_pred, \n            weights='quadratic'\n        )\n\n        self.val_kappas.append(_val_kappa)\n\n        print(f\"val_kappa: {_val_kappa:.4f}\")\n        \n        if _val_kappa == max(self.val_kappas):\n            print(\"Validation Kappa has improved. Saving model.\")\n            model.save_weights('model.h5')\n            model_json = model.to_json()\n            with open('model.json', \"w\") as json_file:\n                json_file.write(model_json)\n            json_file.close()\n\n        return",
      "votes": null
    },
    {
      "id": "614794",
      "postDate": "09/01/2019 04:52:06",
      "content": "<p>I think your for loop is the culprit. </p>\n\n<p>Instead of \n<code>for i in len(y_pred)</code></p>\n\n<p>use </p>\n\n<p><code>for i in range(len(y_pred))</code></p>",
      "rawMarkdown": "I think your for loop is the culprit. \n\nInstead of \n`for i in len(y_pred)`\n\nuse \n\n`for i in range(len(y_pred))`",
      "votes": null
    }
  ],
  "comments": [
    {
      "id": 614794,
      "author_name": "jayasoo",
      "author_url": "",
      "post_date": "09/01/2019 04:52:06",
      "content": "<p>I think your for loop is the culprit. </p>\n\n<p>Instead of \n<code>for i in len(y_pred)</code></p>\n\n<p>use </p>\n\n<p><code>for i in range(len(y_pred))</code></p>",
      "votes": null,
      "replies": []
    }
  ],
  "raw_markdown_by_id": {
    "614714": "Hi,  I am training my model on old data - regression. I am using flow_from_dataframe method of ImageDataGenerator. I don't know if I am right, but I am using class_mode = 'other' in frlo_from_dataframe. I have validation kappa callback, but for the regression model, it always returns zero .I don't understand where I am going wrong. Please help.  Below is the code I am using for validation kappa callback.  Before training begins, I already load the validation images in X_val. \n\n\ndef get_preds(y_hat):\n\n    coef=[0.5,1.5,2.5,3.5]\n    if coef[0]&gt;=y_hat:\n        y_hat=0\n    elif coef[1]&gt;=y_hat:\n        y_hat=1\n    elif coef[2]&gt;=y_hat:\n        y_hat=2\n    elif coef[3]&gt;=y_hat:\n        y_hat=3\n    else:\n        y_hat=4\n            \n\n\nclass Metrics(Callback):\n\n    def on_train_begin(self, logs={}):\n\n        self.val_kappas = []\n\n    def on_epoch_end(self, epoch, logs={}):\n\n        X_val, y_val = self.validation_data[:2]\n\n        \n        y_pred = self.model.predict(X_val)\n\n        for i in len(y_pred):\n            y_pred[i] = get_preds(y_pred[i])\n            \n        \n        _val_kappa = cohen_kappa_score(\n            y_val,\n            y_pred, \n            weights='quadratic'\n        )\n\n        self.val_kappas.append(_val_kappa)\n\n        print(f\"val_kappa: {_val_kappa:.4f}\")\n        \n        if _val_kappa == max(self.val_kappas):\n            print(\"Validation Kappa has improved. Saving model.\")\n            model.save_weights('model.h5')\n            model_json = model.to_json()\n            with open('model.json', \"w\") as json_file:\n                json_file.write(model_json)\n            json_file.close()\n\n        return",
    "614794": "I think your for loop is the culprit. \n\nInstead of \n`for i in len(y_pred)`\n\nuse \n\n`for i in range(len(y_pred))`"
  },
  "source": "meta"
}