1
                images = images / 255.0

                model = tf.keras.Sequential([
                keras.layers.InputLayer(input_shape=(227, 227, 3)),
                keras.layers.Conv2D(96, [7, 7], [4, 4], data_format='channels_last'),
                keras.layers.MaxPooling2D(pool_size=(3, 2), padding="same"),
                keras.layers.Conv2D(2566, [5, 5], [1, 1], data_format='channels_last'),
                keras.layers.MaxPooling2D(pool_size=(3, 2), padding='same'),
                keras.layers.Conv2D(384, [3, 3], [1, 1], data_format='channels_last'),
                keras.layers.MaxPooling2D(pool_size=(3, 2), padding='same'),
                keras.layers.Flatten(),
                keras.layers.Dense(512),
                keras.layers.Dropout(1 - pkeep),
                keras.layers.Dense(512),
                keras.layers.Dropout(1 - pkeep),
                ])

                prune_low_magnitude = tfmot.sparsity.keras.prune_low_magnitude

                batch_size = 128
                epochs = 2

                # Compute end step to finish pruning after 2 epochs.

                validation_split = 0.1 # 10% of training set will be used for validation set. 

                num_images = int(images.shape[0]) * (1 - validation_split)
                end_step = np.ceil(num_images / batch_size).astype(np.int32) * epochs

                # Define model for pruning.
                pruning_params = {
                      'pruning_schedule': tfmot.sparsity.keras.PolynomialDecay(initial_sparsity=0.50,
                                                                               final_sparsity=0.80,
                                                                               begin_step=0,
                                                                               end_step=end_step)
                }

                model_for_pruning = prune_low_magnitude(model, **pruning_params)

                # `prune_low_magnitude` requires a recompile.
                model_for_pruning.compile(optimizer='Adadelta',
                              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
                              metrics=['accuracy'])

                model_for_pruning.summary()

                callbacks = [
                  tfmot.sparsity.keras.UpdatePruningStep(),
                ]
                  

                model_for_pruning.fit(images,
                  batch_size=batch_size, epochs=epochs, validation_split=validation_split, steps_per_epoch=100,
                  callbacks=callbacks)

        with tf.variable_scope('output') as scope:
            
            weights = tf.Variable(tf.random_normal([512, nlabels], mean=0.0, stddev=0.01), name='weights')
            biases = tf.Variable(tf.constant(0.0, shape=[nlabels], dtype=tf.float32), name='biases')
            output = tf.add(tf.matmul(model.output, weights), biases, name=scope.name)

        return output

How do I fix images so it's not a symbolic tensor? Images is a tensor input for the preprocessed image size, with the input images being from the Adience benchmark.

The error says I can't use validation_split with a symbolic tensor. I tried converting the symbolic tensor to a variable and a numpy array, but the program still throws that the input images is a symbolic tensor.

Python 3.7

Keras 2.2.3

Tensorflow 1.14.0

0 Answers0