'UnimplementedError in Tensorflow deep learning

I am trying to create a neural network which gets first letter and last letter of name to find if person is male or not. But unfortunately, I got an error. Please help.

import pandas as pd
from sklearn.model_selection import train_test_split
nsl = ['r','a','v','r','p','a','t','r','m','g']
nel = ['j','k','k','m','l','i','a','a','u','i']
isMale = [1,1,1,1,1,0,0,0,0,0]
df = pd.DataFrame(list(zip(nsl, nel, isMale)), columns =('nsl', 'nel', 'isMale'))
df

and

X = df.drop(['isMale'], axis=1)
y = df['isMale']

and

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=.2)
y_train.head()

and

from tensorflow.keras.models import Sequential, load_model
from tensorflow.keras.layers import Dense
from sklearn.metrics import accuracy_score

and

model = Sequential()
model.add(Dense(units=32, activation='relu', input_dim=len(X_train.columns)))
model.add(Dense(units=64, activation='relu'))
model.add(Dense(units=1, activation='sigmoid'))

and

model.compile(loss='binary_crossentropy', optimizer='sgd')

and

model.fit(X_train, y_train, epochs=50)

I am using Google Colab, and in the last line (model.fit), I got the following error

---------------------------------------------------------------------------
UnimplementedError                        Traceback (most recent call last)
<ipython-input-21-261e644ab303> in <module>()
----> 1 model.fit(X_train, y_train, epochs=50)

1 frames
/usr/local/lib/python3.7/dist-packages/tensorflow/python/eager/execute.py in quick_execute(op_name, num_outputs, inputs, attrs, ctx, name)
     57     ctx.ensure_initialized()
     58     tensors = pywrap_tfe.TFE_Py_Execute(ctx._handle, device_name, op_name,
---> 59                                         inputs, attrs, num_outputs)
     60   except core._NotOkStatusException as e:
     61     if name is not None:

UnimplementedError:  Cast string to float is not supported
     [[node sequential/Cast
 (defined at /usr/local/lib/python3.7/dist-packages/keras/engine/functional.py:671)
]] [Op:__inference_train_function_1159]

Errors may have originated from an input operation.
Input Source operations connected to node sequential/Cast:
In[0] IteratorGetNext (defined at /usr/local/lib/python3.7/dist-packages/keras/engine/training.py:866)

Operation defined at: (most recent call last)
>>>   File "/usr/lib/python3.7/runpy.py", line 193, in _run_module_as_main
>>>     "__main__", mod_spec)
>>> 
>>>   File "/usr/lib/python3.7/runpy.py", line 85, in _run_code
>>>     exec(code, run_globals)
>>> 
>>>   File "/usr/local/lib/python3.7/dist-packages/ipykernel_launcher.py", line 16, in <module>
>>>     app.launch_new_instance()
>>> 
>>>   File "/usr/local/lib/python3.7/dist-packages/traitlets/config/application.py", line 846, in launch_instance
>>>     app.start()
>>> 
>>>   File "/usr/local/lib/python3.7/dist-packages/ipykernel/kernelapp.py", line 499, in start
>>>     self.io_loop.start()
>>> 
>>>   File "/usr/local/lib/python3.7/dist-packages/tornado/platform/asyncio.py", line 132, in start
>>>     self.asyncio_loop.run_forever()
>>> 
>>>   File "/usr/lib/python3.7/asyncio/base_events.py", line 541, in run_forever
>>>     self._run_once()
>>> 
>>>   File "/usr/lib/python3.7/asyncio/base_events.py", line 1786, in _run_once
>>>     handle._run()
>>> 
>>>   File "/usr/lib/python3.7/asyncio/events.py", line 88, in _run
>>>     self._context.run(self._callback, *self._args)
>>> 
>>>   File "/usr/local/lib/python3.7/dist-packages/tornado/platform/asyncio.py", line 122, in _handle_events
>>>     handler_func(fileobj, events)
>>> 
>>>   File "/usr/local/lib/python3.7/dist-packages/tornado/stack_context.py", line 300, in null_wrapper
>>>     return fn(*args, **kwargs)
>>> 
>>>   File "/usr/local/lib/python3.7/dist-packages/zmq/eventloop/zmqstream.py", line 452, in _handle_events
>>>     self._handle_recv()
>>> 
>>>   File "/usr/local/lib/python3.7/dist-packages/zmq/eventloop/zmqstream.py", line 481, in _handle_recv
>>>     self._run_callback(callback, msg)
>>> 
>>>   File "/usr/local/lib/python3.7/dist-packages/zmq/eventloop/zmqstream.py", line 431, in _run_callback
>>>     callback(*args, **kwargs)
>>> 
>>>   File "/usr/local/lib/python3.7/dist-packages/tornado/stack_context.py", line 300, in null_wrapper
>>>     return fn(*args, **kwargs)
>>> 
>>>   File "/usr/local/lib/python3.7/dist-packages/ipykernel/kernelbase.py", line 283, in dispatcher
>>>     return self.dispatch_shell(stream, msg)
>>> 
>>>   File "/usr/local/lib/python3.7/dist-packages/ipykernel/kernelbase.py", line 233, in dispatch_shell
>>>     handler(stream, idents, msg)
>>> 
>>>   File "/usr/local/lib/python3.7/dist-packages/ipykernel/kernelbase.py", line 399, in execute_request
>>>     user_expressions, allow_stdin)
>>> 
>>>   File "/usr/local/lib/python3.7/dist-packages/ipykernel/ipkernel.py", line 208, in do_execute
>>>     res = shell.run_cell(code, store_history=store_history, silent=silent)
>>> 
>>>   File "/usr/local/lib/python3.7/dist-packages/ipykernel/zmqshell.py", line 537, in run_cell
>>>     return super(ZMQInteractiveShell, self).run_cell(*args, **kwargs)
>>> 
>>>   File "/usr/local/lib/python3.7/dist-packages/IPython/core/interactiveshell.py", line 2718, in run_cell
>>>     interactivity=interactivity, compiler=compiler, result=result)
>>> 
>>>   File "/usr/local/lib/python3.7/dist-packages/IPython/core/interactiveshell.py", line 2828, in run_ast_nodes
>>>     if self.run_code(code, result):
>>> 
>>>   File "/usr/local/lib/python3.7/dist-packages/IPython/core/interactiveshell.py", line 2882, in run_code
>>>     exec(code_obj, self.user_global_ns, self.user_ns)
>>> 
>>>   File "<ipython-input-21-261e644ab303>", line 1, in <module>
>>>     model.fit(X_train, y_train, epochs=50)
>>> 
>>>   File "/usr/local/lib/python3.7/dist-packages/keras/utils/traceback_utils.py", line 64, in error_handler
>>>     return fn(*args, **kwargs)
>>> 
>>>   File "/usr/local/lib/python3.7/dist-packages/keras/engine/training.py", line 1216, in fit
>>>     tmp_logs = self.train_function(iterator)
>>> 
>>>   File "/usr/local/lib/python3.7/dist-packages/keras/engine/training.py", line 878, in train_function
>>>     return step_function(self, iterator)
>>> 
>>>   File "/usr/local/lib/python3.7/dist-packages/keras/engine/training.py", line 867, in step_function
>>>     outputs = model.distribute_strategy.run(run_step, args=(data,))
>>> 
>>>   File "/usr/local/lib/python3.7/dist-packages/keras/engine/training.py", line 860, in run_step
>>>     outputs = model.train_step(data)
>>> 
>>>   File "/usr/local/lib/python3.7/dist-packages/keras/engine/training.py", line 808, in train_step
>>>     y_pred = self(x, training=True)
>>> 
>>>   File "/usr/local/lib/python3.7/dist-packages/keras/utils/traceback_utils.py", line 64, in error_handler
>>>     return fn(*args, **kwargs)
>>> 
>>>   File "/usr/local/lib/python3.7/dist-packages/keras/engine/base_layer.py", line 1083, in __call__
>>>     outputs = call_fn(inputs, *args, **kwargs)
>>> 
>>>   File "/usr/local/lib/python3.7/dist-packages/keras/utils/traceback_utils.py", line 92, in error_handler
>>>     return fn(*args, **kwargs)
>>> 
>>>   File "/usr/local/lib/python3.7/dist-packages/keras/engine/sequential.py", line 373, in call
>>>     return super(Sequential, self).call(inputs, training=training, mask=mask)
>>> 
>>>   File "/usr/local/lib/python3.7/dist-packages/keras/engine/functional.py", line 452, in call
>>>     inputs, training=training, mask=mask)
>>> 
>>>   File "/usr/local/lib/python3.7/dist-packages/keras/engine/functional.py", line 571, in _run_internal_graph
>>>     y = self._conform_to_reference_input(y, ref_input=x)
>>> 
>>>   File "/usr/local/lib/python3.7/dist-packages/keras/engine/functional.py", line 671, in _conform_to_reference_input
>>>     tensor = tf.cast(tensor, dtype=ref_input.dtype)
>>>

Plz guys, Plzzz help me fix this error.



Solution 1:[1]

I was able to reproduce the issue. Data generally needs to be put into numeric form for machine learning algorithms to use the data to make predictions. Here I've used label encoding. Please find the working code below:

import pandas as pd
from sklearn.model_selection import train_test_split
nsl = ['r','a','v','r','p','a','t','r','m','g']
nel = ['j','k','k','m','l','i','a','a','u','i']
isMale = [1,1,1,1,1,0,0,0,0,0]
df = pd.DataFrame(list(zip(nsl, nel, isMale)), columns =('nsl', 'nel', 'isMale'))
df.info()

X = df.drop(['isMale'], axis=1)
y = df['isMale']

#Label encoding
X['nsl']=X['nsl'].astype('category')
X['nel']=X['nel'].astype('category')
X['nsl_cat'] = X['nsl'].cat.codes
X['nel_cat'] = X['nel'].cat.codes

X.drop(['nsl','nel'], axis=1,inplace=True)

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=.2)

from tensorflow.keras.models import Sequential, load_model
from tensorflow.keras.layers import Dense
from sklearn.metrics import accuracy_score

model = Sequential()
model.add(Dense(units=32, activation='relu', input_dim=len(X_train.columns)))
model.add(Dense(units=64, activation='relu'))
model.add(Dense(units=1, activation='sigmoid'))

model.compile(loss='binary_crossentropy', optimizer='sgd')
model.fit(X_train, y_train, epochs=10)


The output is as follows:
Epoch 1/10
1/1 [==============================] - 1s 875ms/step - loss: 0.7411
Epoch 2/10
1/1 [==============================] - 0s 20ms/step - loss: 0.7192
Epoch 3/10
1/1 [==============================] - 0s 19ms/step - loss: 0.7030
Epoch 4/10
1/1 [==============================] - 0s 14ms/step - loss: 0.6903
Epoch 5/10
1/1 [==============================] - 0s 15ms/step - loss: 0.6803
Epoch 6/10
1/1 [==============================] - 0s 13ms/step - loss: 0.6726
Epoch 7/10
1/1 [==============================] - 0s 13ms/step - loss: 0.6664
Epoch 8/10
1/1 [==============================] - 0s 22ms/step - loss: 0.6612
Epoch 9/10
1/1 [==============================] - 0s 23ms/step - loss: 0.6568
Epoch 10/10
1/1 [==============================] - 0s 30ms/step - loss: 0.6530
<keras.callbacks.History at 0x7f22f6ec80d0>

Let us know if the issue still persists. Thanks!

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1