Here is the code for the Keras Model, which gives typeError
model=keras.Sequential()
model.add(Dense(128, input_shape=(len(train_x[0]),), activation='relu'))
model.add(Dropout(0,5))
model.add(Dense(64, activation='relu'))
model.add(Dropout(0,5))
model.add(Dense(len(train_y[0]), activation='softmax'))
sgd= SGD(lr=0.01, decay=1e-6, momentum=0.9,nesterov=True)
model.compile(loss='categorical_crossentropy', optimizer= sgd, metrics=
['accuracy'])
model.fit(np.array(train_x),np.array(train_y),epochs=200,batch_size=5,
verbose=1)
model.save("chatbot.model")
print("training is done")
here i 'm creating a chat bot using Keras Sequential Model and encountered
the TypeError which shows on the Training the Neural Network, exact on model.fit line
Note:
intents are the messages i have given in dictionary format, here is the example
{"intents":[{"tag": "welcome", "patterns":["Hi","Hello"],"responses":["Hello","Hi"]}
i have imported nltk, nltk.stem-WordNetLemmatizer, numpy,pickle,random,tensorflow,keras, Keras.Model-Sequential,Keras.Layers-Dense, Activation and Dropout. Keras.Optimizers-SGD
> TypeError: in user code: /usr/local/lib/python3.6/dist-
>
> packages/tensorflow/python/keras/engine/training.py:805 train_function
> * return step_function(self, iterator) /usr/local/lib/python3.6/dist-
packages/tensorflow/python/keras/engine/training.py:795
> step_function ** outputs = model.distribute_strategy.run(run_step,
> args=(data,))
> /usr/local/lib/python3.6/dist-
packages/tensorflow/python/distribute/distribute_lib.py:1259
> run return self._extended.call_for_each_replica(fn, args=args,
> kwargs=kwargs)
> /usr/local/lib/python3.6/dist-
packages/tensorflow/python/distribute/distribute_lib.py:2730
> call_for_each_replica return self._call_for_each_replica(fn, args,
> kwargs)
> /usr/local/lib/python3.6/dist-
packages/tensorflow/python/distribute/distribute_lib.py:3417
> _call_for_each_replica return fn(*args, **kwargs)
/usr/local/lib/python3.6/dist-
packages/tensorflow/python/keras/engine/training.py:788
> run_step ** outputs = model.train_step(data)
> /usr/local/lib/python3.6/dist-
packages/tensorflow/python/keras/engine/training.py:754
> train_step y_pred = self(x, training=True)
> /usr/local/lib/python3.6/dist-
packages/tensorflow/python/keras/engine/base_layer.py:1012
> __call__ outputs = call_fn(inputs, *args, **kwargs)
/usr/local/lib/python3.6/dist-
packages/tensorflow/python/keras/engine/sequential.py:375
> call return super(Sequential, self).call(inputs, training=training,
> mask=mask)
> /usr/local/lib/python3.6/dist-
packages/tensorflow/python/keras/engine/functional.py:425
> call inputs, training=training, mask=mask)
> /usr/local/lib/python3.6/dist-
packages/tensorflow/python/keras/engine/functional.py:560
> _run_internal_graph outputs = node.layer(*args, **kwargs)
/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/base_layer.py:1012
> __call__ outputs = call_fn(inputs, *args, **kwargs) /usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/layers/core.py:231
> call lambda: array_ops.identity(inputs))
> /usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/utils/control_flow_util.py:115
> smart_cond pred, true_fn=true_fn, false_fn=false_fn, name=name)
> /usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/smart_cond.py:54
> smart_cond return true_fn()
> /usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/layers/core.py:226
> dropped_inputs noise_shape=self._get_noise_shape(inputs),
> /usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/layers/core.py:215
> _get_noise_shape for i, value in enumerate(self.noise_shape):
>
> TypeError: 'int' object is not iterable
My suggestion is that these lines are wrong:
model.add(Dropout(0.5)) # replace comma by dot