mlech26l / ncps

PyTorch and TensorFlow implementation of NCP, LTC, and CfC wired neural models
https://www.nature.com/articles/s42256-020-00237-3
Apache License 2.0
1.94k stars 311 forks source link

'NoneType' object cannot be interpreted as an integer` #25

Closed CodingWookie closed 2 years ago

CodingWookie commented 2 years ago

Hey everyone, I am trying to implement NCP for a time series model, defined below.

`class Model: def init(self,model_name,x_train): self.model_name = model_name self.model = self.buildModel(x_train) print("> New model initialized: ",model_name)

def buildModel(self,x_train):
    ncp_wiring = kncp.wirings.NCP(
    inter_neurons=20,  # Number of inter neurons
    command_neurons=10,  # Number of command neurons
    motor_neurons=5,  # Number of motor neurons
    sensory_fanout=4,  # How many outgoing synapses has each sensory neuron
    inter_fanout=5,  # How many outgoing synapses has each inter neuron
    recurrent_command_synapses=6,  # Now many recurrent synapses are in the    # command neuron layer
    motor_fanin=4,)  # How many incoming synapses has each motor neuron    )
    # Overwrite some of the initialization ranges
    ncp_cell = LTCCell(ncp_wiring,initialization_ranges={ "w": (0.2, 2.0),},)  
    height, width, channels = (78, 200, 3)
    model = Sequential()
    x = len(x_train[0])

    model.add(LSTM(256,input_shape=((1,x)), return_sequences = True, activation = "relu"))
    model.add(Dropout(0.2))
    model.add(BatchNormalization())

    model.add(LSTM(128, input_shape=((1, x)), return_sequences=True, activation="relu"))
    model.add(Dropout(0.2))
    model.add(BatchNormalization())

    model.add(LSTM(128, input_shape=((1, x)), activation="relu"))
    model.add(Dropout(0.2))
    model.add(BatchNormalization())

    model.add(RNN(ltc_cell))

    model.add(Dense(32, activation="relu"))
    model.add(Dropout(0.2))

    model.add(Dense(2, activation="softmax"))
    #model.add(keras.layers.RNN(ncp_cell,return_sequences=True))

    optimizer = tf.keras.optimizers.Adam(lr = 0.001, decay = 1e-6)
    model.compile(loss="sparse_categorical_crossentropy",optimizer=optimizer)

    return model`

I then get the following error,

`File "F:\Dropbox\AIML EDUCATION\AIMLEDUCATION\Model.py", line 19, in init self.model = self.buildModel(x_train)

File "F:\Dropbox\AIML EDUCATION\AIMLEDUCATION\Model.py", line 51, in buildModel model.add(RNN(ltc_cell)) File "C:\Users\Denis\anaconda3\envs\tf1\lib\site- packages\tensorflow\python\training\tracking\base.py", line 530, in _method_wrapper result = method(self, *args, **kwargs)

File "C:\Users\Denis\anaconda3\envs\tf1\lib\site-packages\keras\engine\sequential.py", line 217, in add output_tensor = layer(self.outputs[0])

File "C:\Users\Denis\anaconda3\envs\tf1\lib\site-packages\keras\layers\recurrent.py", line 659, in call return super(RNN, self).call(inputs, **kwargs)

File "C:\Users\Denis\anaconda3\envs\tf1\lib\site-packages\keras\engine\base_layer.py", line 977, in call input_list)

File "C:\Users\Denis\anaconda3\envs\tf1\lib\site-packages\keras\engine\base_layer.py", line 1115, in _functional_construction_call inputs, input_masks, args, kwargs)

File "C:\Users\Denis\anaconda3\envs\tf1\lib\site-packages\keras\engine\base_layer.py", line 848, in _keras_tensor_symbolic_call return self._infer_output_signature(inputs, args, kwargs, input_masks)

File "C:\Users\Denis\anaconda3\envs\tf1\lib\site-packages\keras\engine\base_layer.py", line 886, in _infer_output_signature self._maybe_build(inputs)

File "C:\Users\Denis\anaconda3\envs\tf1\lib\site-packages\keras\engine\base_layer.py", line 2659, in _maybe_build self.build(input_shapes) # pylint:disable=not-callable

File "C:\Users\Denis\anaconda3\envs\tf1\lib\site-packages\keras\layers\recurrent.py", line 577, in build self.cell.build(step_input_shape)

File "C:\Users\Denis\anaconda3\envs\tf1\lib\site-packages\kerasncp\tf\ltc_cell.py", line 131, in build self._wiring.build(input_dim)

File "C:\Users\Denis\anaconda3\envs\tf1\lib\site-packages\kerasncp\wirings\wirings.py", line 150, in build super().build(input_shape)

File "C:\Users\Denis\anaconda3\envs\tf1\lib\site-packages\kerasncp\wirings\wirings.py", line 44, in build self.set_input_dim(input_dim)

File "C:\Users\Denis\anaconda3\envs\tf1\lib\site-packages\kerasncp\wirings\wirings.py", line 55, in set_input_dim [input_dim, self.units], dtype=np.int32

TypeError: 'NoneType' object cannot be interpreted as an integer`

Any help would be appreciated.

mlech26l commented 2 years ago

Hi,

Your code does not include the definition of the variable ltc_cell. How did you define it?