Replacing of weights with set_weights or any other method

Viewed 40

I am using tensorflow federated with following imports.

import tensorflow as tf
import tensorflow_federated as tff
import collections
import os
import random
import math
import time
import numpy as np
from numpy import sqrt
from numpy.fft import fft, ifft
from numpy.random import rand
import inspect
import tensorflow_probability as tfp
from matplotlib import pyplot as plt
from tensorflow.keras.models import Model
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import  BatchNormalization, AveragePooling2D, MaxPooling2D, Conv2D, Activation, Dropout,Flatten,Input,Dense,concatenate
from tensorflow.keras import layers, initializers
from tensorflow.python.eager import backprop, context, function
from tensorflow.python.framework import constant_op, dtypes, indexed_slices, ops
from tensorflow.python.ops import embedding_ops, math_ops, resource_variable_ops, resources, variables
from tensorflow.python.platform import test
from tensorflow.python.training import gradient_descent

Consider the following keras model

def create_keras_model():
   return tf.keras.models.Sequential([
     tf.keras.layers.Conv2D(filters=64, kernel_size=[5, 5],name='conv2d_1',activation=tf.nn.relu, use_bias=True, bias_initializer =tf.initializers.lecun_normal(seed=137), input_shape=(28 ,28 ,1)),
     tf.keras.layers.MaxPool2D(pool_size=[2,2], strides=2),
     tf.keras.layers.Conv2D(filters=32, kernel_size=[5,5 ],name='conv2d_2',activation=tf.nn.relu, use_bias = True, bias_initializer=tf.initializers.lecun_normal(seed=137)),
     tf.keras.layers.MaxPool2D(pool_size=[2,2], strides=2),
     tf.keras.layers.Reshape(target_shape=(4 * 4 * 32,)),
     tf.keras.layers.Dense(units= 150, activation=tf.nn.relu, use_bias=True, bias_initializer=tf.initializers.lecun_normal(seed=137), name='dense_1'),
     tf.keras.layers.Dense(units=10 , use_bias=True, bias_initializer=tf.initializers.lecun_normal(seed=137), activation=tf.nn.softmax, name='dense_2'   ),
  ])

I made an instance of the create_keras_model, i.e.,

net_1 = create_keras_model()

I then call the following function

def model_fn():
  # We _must_ create a new model here, and _not_ capture it from an external
  # scope. TFF will call this within different graph contexts.
  global_model = create_keras_model()
  global_model.set_weights(net_1.get_weights())
  return tff.learning.from_keras_model(
      global_model,
      input_spec=preprocessed_example_dataset.element_spec,
      loss=tf.keras.losses.SparseCategoricalCrossentropy(),
      metrics=[tf.keras.metrics.SparseCategoricalAccuracy()])

Following that, I call upon the iterative process

iterative_process = tff.learning.algorithms.build_weighted_fed_avg(
    model_fn, 
    client_optimizer_fn=lambda: tf.keras.optimizers.SGD(learning_rate=0.02),
    server_optimizer_fn=lambda: tf.keras.optimizers.SGD(learning_rate=1.00))

Which gives the following error

AttributeError                            Traceback (most recent call last)
<ipython-input-31-777247538e22> in <module>
      2     model_fn,
      3     client_optimizer_fn=lambda: tf.keras.optimizers.SGD(learning_rate=0.02),
----> 4     server_optimizer_fn=lambda: tf.keras.optimizers.SGD(learning_rate=1.00))

5 frames
/usr/local/lib/python3.7/dist-packages/keras/engine/training_v1.py in get_weights(self)
    155     """
    156     strategy = (self._distribution_strategy or
--> 157                 self._compile_time_distribution_strategy)
    158     if strategy:
    159       with strategy.scope():

AttributeError: 'Sequential' object has no attribute '_compile_time_distribution_strategy'

Any suggestion for removing the error?

0 Answers
Related