Moondra
Moondra

Reputation: 4511

ResourceExhaustedError when allocating tensor of shape [] and type float Keras

My input is 299,299,3

My graphics card is 1070 (8 gigs of ram)

Other Specs: Python 3.6, Keras 2.xx, Tensorflow-backend(1.4), Windows 7

Even batch size of 1 isn't working.

I feel like my card should handle a batch of size one --

Here is my code:

   def full_model():
    #model layers
    input_img = Input(shape=(299, 299, 3))

    tower_1 = Conv2D(64, (1, 1,), padding='same', activation='relu')(input_img)
    tower_1 = Conv2D(64, (3, 3), padding='same', activation='relu')(tower_1)

    tower_2 = Conv2D(64, (1, 1), padding='same', activation='relu')(input_img)
    tower_2 = Conv2D(64, (5, 5), padding='same', activation='relu')(tower_2)

    concatenated_layer = keras.layers.concatenate([tower_1, tower_2], axis=3)

    bottleneck = MaxPooling2D((2, 2), strides=(2, 2), padding='same')(concatenated_layer)
    flatten = Flatten()(bottleneck)
    dense_1 = Dense(500, activation = 'relu')(flatten)
    predictions = Dense(12, activation = 'softmax')(dense_1)


    model = Model(inputs= input_img, output = predictions)
    SGD =keras.optimizers.SGD(lr=0.1, momentum=0.0, decay=0.0, nesterov=False)
    model.compile(optimizer=SGD,
                  loss='categorical_crossentropy',
                  metrics=['accuracy'])

    return model




hdf5_path =r'C:\Users\Moondra\Desktop\Keras Applications\training.hdf5' 
model = full_model()


def run_model( hdf5_path,
               epochs = 10,
               steps_per_epoch =8,
               classes =12,
               batch_size =1, model= model ):



    for i in range(epochs):
        batches = loading_hdf5_files.load_batches(batch_size =1,
                                                  hdf5_path=hdf5_path ,
                                                  classes = classes)    
        for i in range(steps_per_epoch):
            x,y = next(batches)
            #plt.imshow(x[0])
            #plt.show()
            x = (x/255).astype('float32')
            print(x.shape)
            data =model.train_on_batch(x,y)
            print('loss : {:.5},  accuracy :  {:.2%}'.format(*data))

    return model

I can't seem to handle even a batch of size one.

Here is the last part of the error:

ResourceExhaustedError (see above for traceback): OOM when allocating tensor of shape [] and type float
     [[Node: conv2d_4/random_uniform/sub = Const[dtype=DT_FLOAT, value=Tensor<type: float shape: [] values: 0.0866025388>, _device="/job:localhost/replica:0/task:0/device:GPU:0"]()]]

Upvotes: 1

Views: 904

Answers (1)

Moondra
Moondra

Reputation: 4511

It turns out I have way too many parameters.

After running print(model.summary()), I had a billion plus parameters.

I increased size of MaxPooling and no more problems.

Upvotes: 1

Related Questions