Keras.NET How to Use KerasIterator

Viewed 70

I want to do the same as F. Chollet's notebook but in C#.

However, I can't find a way to iterate over my KerasIterator object:

def extract_features(directory, sample_count):
    features = np.zeros(shape=(sample_count, 4, 4, 512))
    labels = np.zeros(shape=(sample_count))

    generator = datagen.flow_from_directory(
        directory,
        target_size=(150, 150),
        batch_size=20,
        class_mode='binary'
    )

    i = 0
    for inputs_batch, labels_batch in generator:
        features_batch = conv_base.predict(inputs_batch)
        features[i * 20 : (i + 1) * 20] = features_batch
        labels[i * 20 : (i + 1) * 20] = labels_batch

        i += 1
        if i * 20 >= sample_count:
            break

    return features, labels

My current C# function is below.

Details:

  • foreach loop gives me a 'Compiler Error CS1579' on KerasIterator
  • for loop is not possible because a KerasIterator doesn't have a Length (or Size, etc.)
private List<NDarray> ExtractFeatures(ImageDataGenerator datagen, String directory, int sample_count)
{
    // create the return NDarrays
    NDarray features = np.zeros(shape: (sample_count, 4, 4, 512));
    NDarray labels = np.zeros(shape: (sample_count, 4, 4, 512));

    KerasIterator generator = datagen.FlowFromDirectory(
        directory,
        target_size: (150, 150).ToTuple(),
        batch_size: 20,
        class_mode: "binary"
    );

    int i = 0;
    /* how do I iterate on 'generator' here, in a similar way than in Python? */

    // return the List element
    return new List<NDarray> { features, labels };
}
1 Answers

As of April 19. 2020 it is not possible with the .NET Wrapper as documented in this issue on the GitHub page for Keras.NET

Related