Keras + Tensorflow CNN with multiple image inputs












0












$begingroup$


I have a CNN that needs to take in 68 images that are all 59x59 pixels. The CNN should output 136 values on the output layer



My training data has shape (-1, 68, 59, 59, 1).



My current approach is to use concatenate to join multiple networks like so:



input_layer = [None] * 68
x = [None] * 68
for i in range(68):
input_layer[i] = tf.keras.layers.Input(shape=training_data.shape[1:][1:])
x[i] = Conv2D(64, (5,5))(input_layer[i])
x[i] = LeakyReLU(alpha=0.3)(x[i])
x[i] = MaxPooling2D(pool_size=(2,2))(x[i])
x[i] = Model(inputs=input_layer[i], outputs=x[i])

combined = concatenate(x)


However, this always gives the error:



ValueError: A `Concatenate` layer should be called on a list of at least 2 inputs


Is this approach a suitable approach or am I doing this completely wrong?










share|improve this question









New contributor




Charley Pearce is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.







$endgroup$












  • $begingroup$
    Isn't this: shape=training_data.shape[1:][1:] the same for each loop?
    $endgroup$
    – Stephen Rauch
    2 hours ago
















0












$begingroup$


I have a CNN that needs to take in 68 images that are all 59x59 pixels. The CNN should output 136 values on the output layer



My training data has shape (-1, 68, 59, 59, 1).



My current approach is to use concatenate to join multiple networks like so:



input_layer = [None] * 68
x = [None] * 68
for i in range(68):
input_layer[i] = tf.keras.layers.Input(shape=training_data.shape[1:][1:])
x[i] = Conv2D(64, (5,5))(input_layer[i])
x[i] = LeakyReLU(alpha=0.3)(x[i])
x[i] = MaxPooling2D(pool_size=(2,2))(x[i])
x[i] = Model(inputs=input_layer[i], outputs=x[i])

combined = concatenate(x)


However, this always gives the error:



ValueError: A `Concatenate` layer should be called on a list of at least 2 inputs


Is this approach a suitable approach or am I doing this completely wrong?










share|improve this question









New contributor




Charley Pearce is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.







$endgroup$












  • $begingroup$
    Isn't this: shape=training_data.shape[1:][1:] the same for each loop?
    $endgroup$
    – Stephen Rauch
    2 hours ago














0












0








0





$begingroup$


I have a CNN that needs to take in 68 images that are all 59x59 pixels. The CNN should output 136 values on the output layer



My training data has shape (-1, 68, 59, 59, 1).



My current approach is to use concatenate to join multiple networks like so:



input_layer = [None] * 68
x = [None] * 68
for i in range(68):
input_layer[i] = tf.keras.layers.Input(shape=training_data.shape[1:][1:])
x[i] = Conv2D(64, (5,5))(input_layer[i])
x[i] = LeakyReLU(alpha=0.3)(x[i])
x[i] = MaxPooling2D(pool_size=(2,2))(x[i])
x[i] = Model(inputs=input_layer[i], outputs=x[i])

combined = concatenate(x)


However, this always gives the error:



ValueError: A `Concatenate` layer should be called on a list of at least 2 inputs


Is this approach a suitable approach or am I doing this completely wrong?










share|improve this question









New contributor




Charley Pearce is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.







$endgroup$




I have a CNN that needs to take in 68 images that are all 59x59 pixels. The CNN should output 136 values on the output layer



My training data has shape (-1, 68, 59, 59, 1).



My current approach is to use concatenate to join multiple networks like so:



input_layer = [None] * 68
x = [None] * 68
for i in range(68):
input_layer[i] = tf.keras.layers.Input(shape=training_data.shape[1:][1:])
x[i] = Conv2D(64, (5,5))(input_layer[i])
x[i] = LeakyReLU(alpha=0.3)(x[i])
x[i] = MaxPooling2D(pool_size=(2,2))(x[i])
x[i] = Model(inputs=input_layer[i], outputs=x[i])

combined = concatenate(x)


However, this always gives the error:



ValueError: A `Concatenate` layer should be called on a list of at least 2 inputs


Is this approach a suitable approach or am I doing this completely wrong?







keras tensorflow cnn






share|improve this question









New contributor




Charley Pearce is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.











share|improve this question









New contributor




Charley Pearce is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









share|improve this question




share|improve this question








edited 2 hours ago









Stephen Rauch

1,52551330




1,52551330






New contributor




Charley Pearce is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









asked 4 hours ago









Charley PearceCharley Pearce

1




1




New contributor




Charley Pearce is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.





New contributor





Charley Pearce is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.






Charley Pearce is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.












  • $begingroup$
    Isn't this: shape=training_data.shape[1:][1:] the same for each loop?
    $endgroup$
    – Stephen Rauch
    2 hours ago


















  • $begingroup$
    Isn't this: shape=training_data.shape[1:][1:] the same for each loop?
    $endgroup$
    – Stephen Rauch
    2 hours ago
















$begingroup$
Isn't this: shape=training_data.shape[1:][1:] the same for each loop?
$endgroup$
– Stephen Rauch
2 hours ago




$begingroup$
Isn't this: shape=training_data.shape[1:][1:] the same for each loop?
$endgroup$
– Stephen Rauch
2 hours ago










1 Answer
1






active

oldest

votes


















0












$begingroup$

No loop is required. You can treat each of 68 images as a channel, for this, you need to move, and squeeze your data axes to (-1, 59, 59, 68) to have 59x59 images with 68 channels, i.e. Input((59, 59, 68)), similar to an RGB image that has 3 channels, the rest is the same.



If 68 images are consecutive frames from a movie, you can use conv3D to extract motion patterns across multiple frames too; this is done by 3D kernels instead of 2D kernels. It requires (-1, 59, 59, 68, 1) data shape and Input((59, 59, 68, 1)).






share|improve this answer









$endgroup$














    Your Answer





    StackExchange.ifUsing("editor", function () {
    return StackExchange.using("mathjaxEditing", function () {
    StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix) {
    StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["$", "$"], ["\\(","\\)"]]);
    });
    });
    }, "mathjax-editing");

    StackExchange.ready(function() {
    var channelOptions = {
    tags: "".split(" "),
    id: "557"
    };
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function() {
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled) {
    StackExchange.using("snippets", function() {
    createEditor();
    });
    }
    else {
    createEditor();
    }
    });

    function createEditor() {
    StackExchange.prepareEditor({
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: false,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: null,
    bindNavPrevention: true,
    postfix: "",
    imageUploader: {
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    },
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    });


    }
    });






    Charley Pearce is a new contributor. Be nice, and check out our Code of Conduct.










    draft saved

    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fdatascience.stackexchange.com%2fquestions%2f48837%2fkeras-tensorflow-cnn-with-multiple-image-inputs%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    0












    $begingroup$

    No loop is required. You can treat each of 68 images as a channel, for this, you need to move, and squeeze your data axes to (-1, 59, 59, 68) to have 59x59 images with 68 channels, i.e. Input((59, 59, 68)), similar to an RGB image that has 3 channels, the rest is the same.



    If 68 images are consecutive frames from a movie, you can use conv3D to extract motion patterns across multiple frames too; this is done by 3D kernels instead of 2D kernels. It requires (-1, 59, 59, 68, 1) data shape and Input((59, 59, 68, 1)).






    share|improve this answer









    $endgroup$


















      0












      $begingroup$

      No loop is required. You can treat each of 68 images as a channel, for this, you need to move, and squeeze your data axes to (-1, 59, 59, 68) to have 59x59 images with 68 channels, i.e. Input((59, 59, 68)), similar to an RGB image that has 3 channels, the rest is the same.



      If 68 images are consecutive frames from a movie, you can use conv3D to extract motion patterns across multiple frames too; this is done by 3D kernels instead of 2D kernels. It requires (-1, 59, 59, 68, 1) data shape and Input((59, 59, 68, 1)).






      share|improve this answer









      $endgroup$
















        0












        0








        0





        $begingroup$

        No loop is required. You can treat each of 68 images as a channel, for this, you need to move, and squeeze your data axes to (-1, 59, 59, 68) to have 59x59 images with 68 channels, i.e. Input((59, 59, 68)), similar to an RGB image that has 3 channels, the rest is the same.



        If 68 images are consecutive frames from a movie, you can use conv3D to extract motion patterns across multiple frames too; this is done by 3D kernels instead of 2D kernels. It requires (-1, 59, 59, 68, 1) data shape and Input((59, 59, 68, 1)).






        share|improve this answer









        $endgroup$



        No loop is required. You can treat each of 68 images as a channel, for this, you need to move, and squeeze your data axes to (-1, 59, 59, 68) to have 59x59 images with 68 channels, i.e. Input((59, 59, 68)), similar to an RGB image that has 3 channels, the rest is the same.



        If 68 images are consecutive frames from a movie, you can use conv3D to extract motion patterns across multiple frames too; this is done by 3D kernels instead of 2D kernels. It requires (-1, 59, 59, 68, 1) data shape and Input((59, 59, 68, 1)).







        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered 1 hour ago









        EsmailianEsmailian

        2,670318




        2,670318






















            Charley Pearce is a new contributor. Be nice, and check out our Code of Conduct.










            draft saved

            draft discarded


















            Charley Pearce is a new contributor. Be nice, and check out our Code of Conduct.













            Charley Pearce is a new contributor. Be nice, and check out our Code of Conduct.












            Charley Pearce is a new contributor. Be nice, and check out our Code of Conduct.
















            Thanks for contributing an answer to Data Science Stack Exchange!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            Use MathJax to format equations. MathJax reference.


            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fdatascience.stackexchange.com%2fquestions%2f48837%2fkeras-tensorflow-cnn-with-multiple-image-inputs%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            Aikido

            Tivadar Csontváry Kosztka

            Metroo de Marsejlo