{
  "id": 100163,
  "title": "How are you using the control data?",
  "url": "/competitions/recursion-cellular-image-classification/discussion/100163",
  "author_name": "",
  "post_date": "2019-07-16T23:40:14.994953300Z",
  "votes": 10,
  "comment_count": 11,
  "views": 0,
  "content": "<p>Using the control data in this challenge is probably one of the important aspects of a good solution.\nThere are positive and negative images in each of the plates. Specifically, the following are the list of siRNA that is common across all experiment/plates:</p>\n\n<pre><code>common_control_sirna = [1108.0, 1109.0, 1115.0, 1116.0, 1117.0, 1121.0, 1123.0, 1124.0, 1125.0, 1126.0, 1128.0, 1129.0, 1131.0, 1134.0, 1135.0, 1136.0, 1137.0, 1138.0]\n</code></pre>\n\n<p>The the id associated with the negative control (i.e., un-treated).</p>\n\n<p>One way to make use of the control examples is to add the images associated with them (6 channels for each) as input to the convNet. I have tried this and it works, but, as you can imagine, makes the training very slow because it increases the dimension of the input very large.</p>\n\n<p>How do you use the control images?</p>",
  "messages": [
    {
      "id": "577675",
      "postDate": "07/16/2019 23:40:14",
      "content": "<p>Using the control data in this challenge is probably one of the important aspects of a good solution.\nThere are positive and negative images in each of the plates. Specifically, the following are the list of siRNA that is common across all experiment/plates:</p>\n\n<pre><code>common_control_sirna = [1108.0, 1109.0, 1115.0, 1116.0, 1117.0, 1121.0, 1123.0, 1124.0, 1125.0, 1126.0, 1128.0, 1129.0, 1131.0, 1134.0, 1135.0, 1136.0, 1137.0, 1138.0]\n</code></pre>\n\n<p>The the id associated with the negative control (i.e., un-treated).</p>\n\n<p>One way to make use of the control examples is to add the images associated with them (6 channels for each) as input to the convNet. I have tried this and it works, but, as you can imagine, makes the training very slow because it increases the dimension of the input very large.</p>\n\n<p>How do you use the control images?</p>",
      "rawMarkdown": "Using the control data in this challenge is probably one of the important aspects of a good solution.\nThere are positive and negative images in each of the plates. Specifically, the following are the list of siRNA that is common across all experiment/plates:\n\n    common_control_sirna = [1108.0, 1109.0, 1115.0, 1116.0, 1117.0, 1121.0, 1123.0, 1124.0, 1125.0, 1126.0, 1128.0, 1129.0, 1131.0, 1134.0, 1135.0, 1136.0, 1137.0, 1138.0]\n\nThe the id associated with the negative control (i.e., un-treated).\n\nOne way to make use of the control examples is to add the images associated with them (6 channels for each) as input to the convNet. I have tried this and it works, but, as you can imagine, makes the training very slow because it increases the dimension of the input very large.\n\nHow do you use the control images?",
      "votes": null
    },
    {
      "id": "577684",
      "postDate": "07/17/2019 00:18:00",
      "content": "<p>hi rrezaii, thanks for sharing. I am also curious how are people using the controls data. </p>\n\n<p>First, why are the <code>sirna</code> labels more than the the classes we are predicting?</p>\n\n<p>Also what do you mean by <code>add the images associated with them (6 channels for each) as input to the convNet</code>? Do you mean instead of predicting an image to a label, we separate into 6 layers and leave the 6 layers as an image? How is this related to the negative images?</p>",
      "rawMarkdown": "hi rrezaii, thanks for sharing. I am also curious how are people using the controls data. \n\nFirst, why are the `sirna` labels more than the the classes we are predicting?\n\nAlso what do you mean by `add the images associated with them (6 channels for each) as input to the convNet`? Do you mean instead of predicting an image to a label, we separate into 6 layers and leave the 6 layers as an image? How is this related to the negative images?",
      "votes": null
    },
    {
      "id": "577745",
      "postDate": "07/17/2019 03:15:29",
      "content": "<p>The siRNA labels for control cases are outside the range of the ones in training and testing. That’s fine because the control cases are the ones that the effect of siRNA is proven to be the most effective (or in the case of negative control to be not present).</p>\n\n<p>Each of the images have 6 channels. This is true for control images and test/training images. So, one way of incorporating the effect of control images is to feed them as inputs to the network along with the training/test image (the slow approach). </p>\n\n<p>Currently, I seem to have an overfitting problem.</p>",
      "rawMarkdown": "The siRNA labels for control cases are outside the range of the ones in training and testing. That’s fine because the control cases are the ones that the effect of siRNA is proven to be the most effective (or in the case of negative control to be not present).\n\nEach of the images have 6 channels. This is true for control images and test/training images. So, one way of incorporating the effect of control images is to feed them as inputs to the network along with the training/test image (the slow approach). \n\nCurrently, I seem to have an overfitting problem.",
      "votes": null
    },
    {
      "id": "578215",
      "postDate": "07/17/2019 13:31:53",
      "content": "<p>I thought about it a lot, but I have no much experience to give some reasonable solution yet. One idea is to use my convNet not only for siRNA classification, but also to project control wells to dense feature vector. And than, combine it through dense layer to make final predictions.\nI will check the idea as soon as possible.\nHope for new ideas here =)</p>",
      "rawMarkdown": "I thought about it a lot, but I have no much experience to give some reasonable solution yet. One idea is to use my convNet not only for siRNA classification, but also to project control wells to dense feature vector. And than, combine it through dense layer to make final predictions.\nI will check the idea as soon as possible.\nHope for new ideas here =)",
      "votes": null
    },
    {
      "id": "578560",
      "postDate": "07/17/2019 21:28:47",
      "content": "<p>I'extract features both from train images and corresponding negative controls using pretrained convnet. Than take a simple difference between features. It is less general, than feeding both control and train samples to dense layer but seems working for me. I also think about some kind of \"feature change normalization\" using positive and negative controls (not tried yet) </p>",
      "rawMarkdown": "I'extract features both from train images and corresponding negative controls using pretrained convnet. Than take a simple difference between features. It is less general, than feeding both control and train samples to dense layer but seems working for me. I also think about some kind of \"feature change normalization\" using positive and negative controls (not tried yet)",
      "votes": null
    },
    {
      "id": "578639",
      "postDate": "07/18/2019 01:06:22",
      "content": "<p>Your approach is sound. \nI use a point-wise conv layer to allow the network to learn how to combine input image with the control images. \n<code>input_3ch = Conv2D(3, (1, 1), kernel_initializer='he_normal', activation='linear', padding='same')(input_images)\n</code></p>",
      "rawMarkdown": "Your approach is sound. \nI use a point-wise conv layer to allow the network to learn how to combine input image with the control images. \n`    input_3ch = Conv2D(3, (1, 1), kernel_initializer='he_normal', activation='linear', padding='same')(input_images)\n`",
      "votes": null
    },
    {
      "id": "578666",
      "postDate": "07/18/2019 02:20:02",
      "content": "<p>thanks for sharing the ideas. when you mention \"feeding both control and train samples to dense layer\", does it mean you take the tensors of negative controls + tensors of an image and then feed them to dense layer? how can we make use of positive controls then? :O Thanks! </p>",
      "rawMarkdown": "thanks for sharing the ideas. when you mention \"feeding both control and train samples to dense layer\", does it mean you take the tensors of negative controls + tensors of an image and then feed them to dense layer? how can we make use of positive controls then? :O Thanks!",
      "votes": null
    },
    {
      "id": "578668",
      "postDate": "07/18/2019 02:22:00",
      "content": "<p>hi <a href=\"/cutlass90\">@cutlass90</a>, thanks for sharing your ideas. Does \"combine\" mean adding the tensors of negative controls to tensors of image you are predicting before feeding to ConvNet? Any idea about the positive controls? i am also debating between \"adding\" and \"subtracting\". what are your thoughts? thanks!</p>",
      "rawMarkdown": "hi @cutlass90, thanks for sharing your ideas. Does \"combine\" mean adding the tensors of negative controls to tensors of image you are predicting before feeding to ConvNet? Any idea about the positive controls? i am also debating between \"adding\" and \"subtracting\". what are your thoughts? thanks!",
      "votes": null
    },
    {
      "id": "578718",
      "postDate": "07/18/2019 04:16:00",
      "content": "<p>I feed positive and negative control images along with the training image (each are 6 channels) as input to my convNet. It's probably not the best approach because it makes training pretty slow.</p>",
      "rawMarkdown": "I feed positive and negative control images along with the training image (each are 6 channels) as input to my convNet. It's probably not the best approach because it makes training pretty slow.",
      "votes": null
    },
    {
      "id": "578941",
      "postDate": "07/18/2019 10:13:21",
      "content": "<p>I think it will be enough to project control wells to small vector (64 or something else) and then just concatenate it and pass it through dense layers to shrink it down to 128 features. The matrix must be not so huge 64*18*128 = 147456 weights.</p>",
      "rawMarkdown": "I think it will be enough to project control wells to small vector (64 or something else) and then just concatenate it and pass it through dense layers to shrink it down to 128 features. The matrix must be not so huge 64*18*128 = 147456 weights.",
      "votes": null
    },
    {
      "id": "590704",
      "postDate": "08/02/2019 13:36:16",
      "content": "<p><a href=\"/cutlass90\">@cutlass90</a> , do you do this by just feeding in all the controls every step (i.e. a lot of data per batch, thus slow), or do you think there is a smart way to pre-project the vectors, then add them to the training data? </p>",
      "rawMarkdown": "cutlass90 , do you do this by just feeding in all the controls every step (i.e. a lot of data per batch, thus slow), or do you think there is a smart way to pre-project the vectors, then add them to the training data?",
      "votes": null
    },
    {
      "id": "590744",
      "postDate": "08/02/2019 14:30:46",
      "content": "<p>that's a good point. I just noticed he meant all the controls per image, amounting to 31 or 32 controls per image. that's quite huge. is that how you are approaching, Nazar?</p>",
      "rawMarkdown": "that's a good point. I just noticed he meant all the controls per image, amounting to 31 or 32 controls per image. that's quite huge. is that how you are approaching, Nazar?",
      "votes": null
    }
  ],
  "comments": [
    {
      "id": 577684,
      "author_name": "wjshenggggg",
      "author_url": "",
      "post_date": "07/17/2019 00:18:00",
      "content": "<p>hi rrezaii, thanks for sharing. I am also curious how are people using the controls data. </p>\n\n<p>First, why are the <code>sirna</code> labels more than the the classes we are predicting?</p>\n\n<p>Also what do you mean by <code>add the images associated with them (6 channels for each) as input to the convNet</code>? Do you mean instead of predicting an image to a label, we separate into 6 layers and leave the 6 layers as an image? How is this related to the negative images?</p>",
      "votes": null,
      "replies": [
        {
          "id": 577745,
          "author_name": "rrezaii",
          "author_url": "",
          "post_date": "07/17/2019 03:15:29",
          "content": "<p>The siRNA labels for control cases are outside the range of the ones in training and testing. That’s fine because the control cases are the ones that the effect of siRNA is proven to be the most effective (or in the case of negative control to be not present).</p>\n\n<p>Each of the images have 6 channels. This is true for control images and test/training images. So, one way of incorporating the effect of control images is to feed them as inputs to the network along with the training/test image (the slow approach). </p>\n\n<p>Currently, I seem to have an overfitting problem.</p>",
          "votes": null,
          "replies": []
        }
      ]
    },
    {
      "id": 578215,
      "author_name": "cutlass90",
      "author_url": "",
      "post_date": "07/17/2019 13:31:53",
      "content": "<p>I thought about it a lot, but I have no much experience to give some reasonable solution yet. One idea is to use my convNet not only for siRNA classification, but also to project control wells to dense feature vector. And than, combine it through dense layer to make final predictions.\nI will check the idea as soon as possible.\nHope for new ideas here =)</p>",
      "votes": null,
      "replies": [
        {
          "id": 578668,
          "author_name": "wjshenggggg",
          "author_url": "",
          "post_date": "07/18/2019 02:22:00",
          "content": "<p>hi <a href=\"/cutlass90\">@cutlass90</a>, thanks for sharing your ideas. Does \"combine\" mean adding the tensors of negative controls to tensors of image you are predicting before feeding to ConvNet? Any idea about the positive controls? i am also debating between \"adding\" and \"subtracting\". what are your thoughts? thanks!</p>",
          "votes": null,
          "replies": []
        },
        {
          "id": 578941,
          "author_name": "cutlass90",
          "author_url": "",
          "post_date": "07/18/2019 10:13:21",
          "content": "<p>I think it will be enough to project control wells to small vector (64 or something else) and then just concatenate it and pass it through dense layers to shrink it down to 128 features. The matrix must be not so huge 64*18*128 = 147456 weights.</p>",
          "votes": null,
          "replies": []
        },
        {
          "id": 590704,
          "author_name": "fnands",
          "author_url": "",
          "post_date": "08/02/2019 13:36:16",
          "content": "<p><a href=\"/cutlass90\">@cutlass90</a> , do you do this by just feeding in all the controls every step (i.e. a lot of data per batch, thus slow), or do you think there is a smart way to pre-project the vectors, then add them to the training data? </p>",
          "votes": null,
          "replies": []
        },
        {
          "id": 590744,
          "author_name": "wjshenggggg",
          "author_url": "",
          "post_date": "08/02/2019 14:30:46",
          "content": "<p>that's a good point. I just noticed he meant all the controls per image, amounting to 31 or 32 controls per image. that's quite huge. is that how you are approaching, Nazar?</p>",
          "votes": null,
          "replies": []
        }
      ]
    },
    {
      "id": 578560,
      "author_name": "alexanderkhar",
      "author_url": "",
      "post_date": "07/17/2019 21:28:47",
      "content": "<p>I'extract features both from train images and corresponding negative controls using pretrained convnet. Than take a simple difference between features. It is less general, than feeding both control and train samples to dense layer but seems working for me. I also think about some kind of \"feature change normalization\" using positive and negative controls (not tried yet) </p>",
      "votes": null,
      "replies": [
        {
          "id": 578639,
          "author_name": "rrezaii",
          "author_url": "",
          "post_date": "07/18/2019 01:06:22",
          "content": "<p>Your approach is sound. \nI use a point-wise conv layer to allow the network to learn how to combine input image with the control images. \n<code>input_3ch = Conv2D(3, (1, 1), kernel_initializer='he_normal', activation='linear', padding='same')(input_images)\n</code></p>",
          "votes": null,
          "replies": []
        },
        {
          "id": 578666,
          "author_name": "wjshenggggg",
          "author_url": "",
          "post_date": "07/18/2019 02:20:02",
          "content": "<p>thanks for sharing the ideas. when you mention \"feeding both control and train samples to dense layer\", does it mean you take the tensors of negative controls + tensors of an image and then feed them to dense layer? how can we make use of positive controls then? :O Thanks! </p>",
          "votes": null,
          "replies": []
        },
        {
          "id": 578718,
          "author_name": "rrezaii",
          "author_url": "",
          "post_date": "07/18/2019 04:16:00",
          "content": "<p>I feed positive and negative control images along with the training image (each are 6 channels) as input to my convNet. It's probably not the best approach because it makes training pretty slow.</p>",
          "votes": null,
          "replies": []
        }
      ]
    }
  ],
  "raw_markdown_by_id": {
    "577675": "Using the control data in this challenge is probably one of the important aspects of a good solution.\nThere are positive and negative images in each of the plates. Specifically, the following are the list of siRNA that is common across all experiment/plates:\n\n    common_control_sirna = [1108.0, 1109.0, 1115.0, 1116.0, 1117.0, 1121.0, 1123.0, 1124.0, 1125.0, 1126.0, 1128.0, 1129.0, 1131.0, 1134.0, 1135.0, 1136.0, 1137.0, 1138.0]\n\nThe the id associated with the negative control (i.e., un-treated).\n\nOne way to make use of the control examples is to add the images associated with them (6 channels for each) as input to the convNet. I have tried this and it works, but, as you can imagine, makes the training very slow because it increases the dimension of the input very large.\n\nHow do you use the control images?",
    "577684": "hi rrezaii, thanks for sharing. I am also curious how are people using the controls data. \n\nFirst, why are the `sirna` labels more than the the classes we are predicting?\n\nAlso what do you mean by `add the images associated with them (6 channels for each) as input to the convNet`? Do you mean instead of predicting an image to a label, we separate into 6 layers and leave the 6 layers as an image? How is this related to the negative images?",
    "577745": "The siRNA labels for control cases are outside the range of the ones in training and testing. That’s fine because the control cases are the ones that the effect of siRNA is proven to be the most effective (or in the case of negative control to be not present).\n\nEach of the images have 6 channels. This is true for control images and test/training images. So, one way of incorporating the effect of control images is to feed them as inputs to the network along with the training/test image (the slow approach). \n\nCurrently, I seem to have an overfitting problem.",
    "578215": "I thought about it a lot, but I have no much experience to give some reasonable solution yet. One idea is to use my convNet not only for siRNA classification, but also to project control wells to dense feature vector. And than, combine it through dense layer to make final predictions.\nI will check the idea as soon as possible.\nHope for new ideas here =)",
    "578560": "I'extract features both from train images and corresponding negative controls using pretrained convnet. Than take a simple difference between features. It is less general, than feeding both control and train samples to dense layer but seems working for me. I also think about some kind of \"feature change normalization\" using positive and negative controls (not tried yet)",
    "578639": "Your approach is sound. \nI use a point-wise conv layer to allow the network to learn how to combine input image with the control images. \n`    input_3ch = Conv2D(3, (1, 1), kernel_initializer='he_normal', activation='linear', padding='same')(input_images)\n`",
    "578666": "thanks for sharing the ideas. when you mention \"feeding both control and train samples to dense layer\", does it mean you take the tensors of negative controls + tensors of an image and then feed them to dense layer? how can we make use of positive controls then? :O Thanks!",
    "578668": "hi @cutlass90, thanks for sharing your ideas. Does \"combine\" mean adding the tensors of negative controls to tensors of image you are predicting before feeding to ConvNet? Any idea about the positive controls? i am also debating between \"adding\" and \"subtracting\". what are your thoughts? thanks!",
    "578718": "I feed positive and negative control images along with the training image (each are 6 channels) as input to my convNet. It's probably not the best approach because it makes training pretty slow.",
    "578941": "I think it will be enough to project control wells to small vector (64 or something else) and then just concatenate it and pass it through dense layers to shrink it down to 128 features. The matrix must be not so huge 64*18*128 = 147456 weights.",
    "590704": "cutlass90 , do you do this by just feeding in all the controls every step (i.e. a lot of data per batch, thus slow), or do you think there is a smart way to pre-project the vectors, then add them to the training data?",
    "590744": "that's a good point. I just noticed he meant all the controls per image, amounting to 31 or 32 controls per image. that's quite huge. is that how you are approaching, Nazar?"
  },
  "source": "meta"
}