コード例 #1
0
    for epoch in range(num_epoch):
        print(f"\nStart of Training Epoch {epoch}")
        for step, (x_batch_train, y_batch_train) in enumerate(train_dataset):
            with tf.GradientTape() as tape:
                y_pred = model(x_batch_train, training=True)
                loss_fn = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False)
                loss = loss_fn(y_batch_train, y_pred)
                train_accuracy(y_batch_train, y_pred)
                train_loss(loss)
                #print("Step", step, loss)
                
                gradient_list = tape.gradient(loss, model.trainable_weights)
                q = Quantize()
                # Set the bitwidth here
                q.bitwidth = 8
                q_gradient_list = []
                for each_array in gradient_list:
                    q_w = q.quantize(each_array.numpy())
                    q_gradient_list.append(tf.convert_to_tensor(q_w))
                
                # TEST
                '''
                for each in range(len(q_gradient_list)):
                    print(q_gradient_list[each])
                    print("+++++++++++++++++++++++++++++")
                    print(gradient_list[each])
                    sys.exit()
                '''

                # Send QUANTIZED gradients to server
コード例 #2
0
    for epoch in range(num_epoch):
        print(f"\nStart of Training Epoch {epoch}")
        for step, (x_batch_train, y_batch_train) in enumerate(train_dataset):
            with tf.GradientTape() as tape:
                y_pred = model(x_batch_train, training=True)
                loss_fn = tf.keras.losses.SparseCategoricalCrossentropy(
                    from_logits=False)
                loss = loss_fn(y_batch_train, y_pred)
                train_accuracy(y_batch_train, y_pred)
                train_loss(loss)
                #print("Step", step, loss)

                gradient_list = tape.gradient(loss, model.trainable_weights)
                q = Quantize()
                # Set the bitwidth here
                q.bitwidth = 16
                q_gradient_list = []
                for each_array in gradient_list:
                    q_w = q.quantize(each_array.numpy())
                    q_gradient_list.append(tf.convert_to_tensor(q_w))

                # TEST
                '''
                for each in range(len(q_gradient_list)):
                    print(q_gradient_list[each])
                    print("+++++++++++++++++++++++++++++")
                    print(gradient_list[each])
                    sys.exit()
                '''

                # Send QUANTIZED gradients to server
コード例 #3
0
                    threshold = tf.fill(grad_elem_shapes[i], k_val)
                    mask = tf.math.abs(grad[i]) < threshold

                    elems_equal = tf.equal(mask, False)
                    as_int = tf.cast(elems_equal, tf.int32)
                    count = tf.reduce_sum(as_int)
                    #print("COUNT K:", count)

                    np_u = np.array(u[i])
                    top_k_grad[i] = np.where(mask, 0.0, np_u)

                # Send gradients to server

                q = Quantize()
                # Set the bitwidth here
                q.bitwidth = 32
                q_gradient_list = []
                for each_array in top_k_grad:
                    q_w = q.quantize(each_array)
                    q_gradient_list.append(q_w)

                for i in range(len(np_u)):
                    # Feedback error correction
                    r[i] = u[i] - q_gradient_list[i]

                comm.send(q_gradient_list, dest=0, tag=11)

            ## NOT WORKING: Receive and set weights from server
            #weights = comm.recv(source=0, tag=11)
            #model.set_weights(weights)