'Error using AlexNet for Transfer Learning

I'm trying to do Transfer Learning in AlexNet, from Fashion MNIST to MNIST. The error I'm receiving is

InvalidArgumentError

Traceback (most recent call last)
in ()
2 #alex1.compile(optimizer='adam',loss = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True), metrics=['accuracy'])
3 tic = time.time()
----> 4 history = alex1.fit(x_train, y_train, batch_size=128, epochs=20, validation_data=(x_val2, y_val2))
5 toc = time.time()
6 elapsed_time = toc-tic

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)
53 ctx.ensure_initialized()
54 tensors = pywrap_tfe.TFE_Py_Execute(ctx._handle, device_name, op_name,
---> 55 inputs, attrs, num_outputs)
56 except core._NotOkStatusException as e:
57 if name is not None:

InvalidArgumentError: Graph execution error:

Detected at node 'Equal' 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 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 2822, 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 "", line 4, in history = alex1.fit(x_train, y_train, batch_size=128, epochs=20, validation_data=(x_val2, y_val2))
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 1384, in fit tmp_logs = self.train_function(iterator)
File "/usr/local/lib/python3.7/dist-packages/keras/engine/training.py", line 1021, in train_function return step_function(self, iterator)
File "/usr/local/lib/python3.7/dist-packages/keras/engine/training.py", line 1010, 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 1000, in run_step outputs = model.train_step(data)
File "/usr/local/lib/python3.7/dist-packages/keras/engine/training.py", line 864, in train_step return self.compute_metrics(x, y, y_pred, sample_weight)
File "/usr/local/lib/python3.7/dist-packages/keras/engine/training.py", line 957, in compute_metrics self.compiled_metrics.update_state(y, y_pred, sample_weight)
File "/usr/local/lib/python3.7/dist-packages/keras/engine/compile_utils.py", line 459, in update_state metric_obj.update_state(y_t, y_p, sample_weight=mask)
File "/usr/local/lib/python3.7/dist-packages/keras/utils/metrics_utils.py", line 70, in decorated update_op = update_state_fn(*args, **kwargs)
File "/usr/local/lib/python3.7/dist-packages/keras/metrics.py", line 178, in update_state_fn return ag_update_state(*args, **kwargs)
File "/usr/local/lib/python3.7/dist-packages/keras/metrics.py", line 729, in update_state matches = ag_fn(y_true, y_pred, **self._fn_kwargs)
File "/usr/local/lib/python3.7/dist-packages/keras/metrics.py", line 4086, in sparse_categorical_accuracy return tf.cast(tf.equal(y_true, y_pred), backend.floatx())
Node: 'Equal' required broadcastable shapes
[[{{node Equal}}]] [Op:__inference_train_function_7770]

   # Download Fashion MNIST
   import torch
   import torch.nn as nn
   import torch.nn.functional as F
   import torch.optim as optim
   from torch.optim.lr_scheduler import _LRScheduler
   import torch.utils.data as data

   import torchvision.transforms as transforms
   import torchvision.datasets as datasets
   from torchvision import models

   objects = tf.keras.datasets.fashion_mnist
   (x_train, y_train), (x_test, y_test) = objects.load_data()
   x_train = tf.pad(x_train, [[0, 0], [2,2], [2,2]])/255
   x_test = tf.pad(x_test, [[0, 0], [2,2], [2,2]])/255
   x_train = tf.expand_dims(x_train, axis=3, name=None)
   x_test = tf.expand_dims(x_test, axis=3, name=None)
   x_train = tf.repeat(x_train, 3, axis=3)
   x_test = tf.repeat(x_test, 3, axis=3)
   x_val = x_train[-2000:,:,:,:]
   y_val = y_train[-2000:]
   x_train = x_train[:-2000,:,:,:]
   y_train = y_train[:-2000] 

   # Load MNIST
   import tensorflow as tf

   objects = tf.keras.datasets.mnist
   (x_train2, y_train2), (x_test2, y_test2) = objects.load_data()
   
   # Create AlexNet
   import keras
   from numpy import mean
   from numpy import std
   from matplotlib import pyplot
   from tensorflow.keras.utils import to_categorical
   from keras.models import Sequential
   from keras.layers import Conv2D
   from keras.layers import MaxPooling2D
   from keras.layers import Dense
   from keras.layers import Flatten
   from tensorflow.keras.optimizers import SGD
   import torch
   import tensorflow.keras
   from tensorflow.keras import datasets, layers, models, losses

   model = models.Sequential()
   model.add(layers.experimental.preprocessing.Resizing(224, 224, interpolation="bilinear", 
   input_shape=x_train.shape[1:]))
   model.add(layers.Conv2D(96, 11, strides=4, padding='same'))
   model.add(layers.Lambda(tf.nn.local_response_normalization))
   model.add(layers.Activation('relu'))
   model.add(layers.MaxPooling2D(3, strides=2))
   model.add(layers.Conv2D(256, 5, strides=4, padding='same'))
   model.add(layers.Lambda(tf.nn.local_response_normalization))
   model.add(layers.Activation('relu'))
   model.add(layers.MaxPooling2D(3, strides=2))
   model.add(layers.Conv2D(384, 3, strides=4, padding='same'))
   model.add(layers.Activation('relu'))
   model.add(layers.Conv2D(384, 3, strides=4, padding='same'))
   model.add(layers.Activation('relu'))
   model.add(layers.Conv2D(256, 3, strides=4, padding='same'))
   model.add(layers.Activation('relu'))
   model.add(layers.Flatten())
   model.add(layers.Dense(4096, activation='relu'))
   model.add(layers.Dropout(0.5))
   model.add(layers.Dense(4096, activation='relu'))
   model.add(layers.Dropout(0.5))
   model.add(layers.Dense(10, activation='softmax'))

   alex = model
   alex.summary()

   print(alex)

   # Transfer Learning
   from tensorflow import keras
   from keras.layers import Dropout
   from keras.models import Model

   for layer in alex.layers[:-1]:
      layer.trainable = False
   #x = alex.layers[2].output
   #x = Dropout(0.5)(x)
   #x = Dense(32,activation='relu')(x)
   #x = Dense(16,activation='relu')(x)
   predictions = Dense(10,activation='softmax')(x)

   alex1 = Model(alex.input,predictions)
   alex1.summary()

   # Compile
   alex1.compile(optimizer='adam', loss=losses.sparse_categorical_crossentropy, metrics= 
     ['accuracy'])
   
   tic = time.time()
   history = alex1.fit(x_train, y_train, batch_size=128, epochs=20, validation_data=(x_val2, 
     y_val2))
   toc = time.time()
   elapsed_time = toc-tic
   print(elapsed_time)

I've seen that this is usually because the number of labels, but here both datasets have 10 classes. Any idea or suggestion? Thanks in advance.



Sources

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

Source: Stack Overflow

Solution Source