Error:
---------------------------------------------------------------------------
InvalidArgumentError Traceback (most recent call last)
<ipython-input-10-6408bf8740d5> in <cell line: 11>()
9 # Train the model
10 #model.fit(x_train, epochs=10)
---> 11 model.fit(X_train, y_train, epochs=10, batch_size=16, validation_data=(X_val, y_val))
1 frames
/usr/local/lib/python3.9/dist-packages/tensorflow/python/eager/execute.py in quick_execute(op_name, num_outputs, inputs, attrs, ctx, name)
50 try:
51 ctx.ensure_initialized()
---> 52 tensors = pywrap_tfe.TFE_Py_Execute(ctx._handle, device_name, op_name,
53 inputs, attrs, num_outputs)
54 except core._NotOkStatusException as e:
InvalidArgumentError: Graph execution error:
Detected at node 'gradient_tape/model_2/tf.keras.backend.binary_crossentropy/mul/BroadcastGradientArgs' defined at (most recent call last):
File "/usr/lib/python3.9/runpy.py", line 197, in _run_module_as_main
return _run_code(code, main_globals, None,
File "/usr/lib/python3.9/runpy.py", line 87, in _run_code
exec(code, run_globals)
File "/usr/local/lib/python3.9/dist-packages/ipykernel_launcher.py", line 16, in <module>
app.launch_new_instance()
File "/usr/local/lib/python3.9/dist-packages/traitlets/config/application.py", line 992, in launch_instance
app.start()
File "/usr/local/lib/python3.9/dist-packages/ipykernel/kernelapp.py", line 619, in start
self.io_loop.start()
File "/usr/local/lib/python3.9/dist-packages/tornado/platform/asyncio.py", line 215, in start
self.asyncio_loop.run_forever()
File "/usr/lib/python3.9/asyncio/base_events.py", line 601, in run_forever
self._run_once()
File "/usr/lib/python3.9/asyncio/base_events.py", line 1905, in _run_once
handle._run()
File "/usr/lib/python3.9/asyncio/events.py", line 80, in _run
self._context.run(self._callback, *self._args)
File "/usr/local/lib/python3.9/dist-packages/tornado/ioloop.py", line 687, in <lambda>
lambda f: self._run_callback(functools.partial(callback, future))
File "/usr/local/lib/python3.9/dist-packages/tornado/ioloop.py", line 740, in _run_callback
ret = callback()
File "/usr/local/lib/python3.9/dist-packages/tornado/gen.py", line 821, in inner
self.ctx_run(self.run)
File "/usr/local/lib/python3.9/dist-packages/tornado/gen.py", line 782, in run
yielded = self.gen.send(value)
File "/usr/local/lib/python3.9/dist-packages/ipykernel/kernelbase.py", line 361, in process_one
yield gen.maybe_future(dispatch(*args))
File "/usr/local/lib/python3.9/dist-packages/tornado/gen.py", line 234, in wrapper
yielded = ctx_run(next, result)
File "/usr/local/lib/python3.9/dist-packages/ipykernel/kernelbase.py", line 261, in dispatch_shell
yield gen.maybe_future(handler(stream, idents, msg))
File "/usr/local/lib/python3.9/dist-packages/tornado/gen.py", line 234, in wrapper
yielded = ctx_run(next, result)
File "/usr/local/lib/python3.9/dist-packages/ipykernel/kernelbase.py", line 539, in execute_request
self.do_execute(
File "/usr/local/lib/python3.9/dist-packages/tornado/gen.py", line 234, in wrapper
yielded = ctx_run(next, result)
File "/usr/local/lib/python3.9/dist-packages/ipykernel/ipkernel.py", line 302, in do_execute
res = shell.run_cell(code, store_history=store_history, silent=silent)
File "/usr/local/lib/python3.9/dist-packages/ipykernel/zmqshell.py", line 539, in run_cell
return super(ZMQInteractiveShell, self).run_cell(*args, **kwargs)
File "/usr/local/lib/python3.9/dist-packages/IPython/core/interactiveshell.py", line 2975, in run_cell
result = self._run_cell(
File "/usr/local/lib/python3.9/dist-packages/IPython/core/interactiveshell.py", line 3030, in _run_cell
return runner(coro)
File "/usr/local/lib/python3.9/dist-packages/IPython/core/async_helpers.py", line 78, in _pseudo_sync_runner
coro.send(None)
File "/usr/local/lib/python3.9/dist-packages/IPython/core/interactiveshell.py", line 3257, in run_cell_async
has_raised = await self.run_ast_nodes(code_ast.body, cell_name,
File "/usr/local/lib/python3.9/dist-packages/IPython/core/interactiveshell.py", line 3473, in run_ast_nodes
if (await self.run_code(code, result, async_=asy)):
File "/usr/local/lib/python3.9/dist-packages/IPython/core/interactiveshell.py", line 3553, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-10-6408bf8740d5>", line 11, in <cell line: 11>
model.fit(X_train, y_train, epochs=10, batch_size=16, validation_data=(X_val, y_val))
File "/usr/local/lib/python3.9/dist-packages/keras/utils/traceback_utils.py", line 65, in error_handler
return fn(*args, **kwargs)
File "/usr/local/lib/python3.9/dist-packages/keras/engine/training.py", line 1685, in fit
tmp_logs = self.train_function(iterator)
File "/usr/local/lib/python3.9/dist-packages/keras/engine/training.py", line 1284, in train_function
return step_function(self, iterator)
File "/usr/local/lib/python3.9/dist-packages/keras/engine/training.py", line 1268, in step_function
outputs = model.distribute_strategy.run(run_step, args=(data,))
File "/usr/local/lib/python3.9/dist-packages/keras/engine/training.py", line 1249, in run_step
outputs = model.train_step(data)
File "/usr/local/lib/python3.9/dist-packages/keras/engine/training.py", line 1054, in train_step
self.optimizer.minimize(loss, self.trainable_variables, tape=tape)
File "/usr/local/lib/python3.9/dist-packages/keras/optimizers/optimizer.py", line 542, in minimize
grads_and_vars = self.compute_gradients(loss, var_list, tape)
File "/usr/local/lib/python3.9/dist-packages/keras/optimizers/optimizer.py", line 275, in compute_gradients
grads = tape.gradient(loss, var_list)
Node: 'gradient_tape/model_2/tf.keras.backend.binary_crossentropy/mul/BroadcastGradientArgs'
Incompatible shapes: [640000] vs. [262144]
[[{{node gradient_tape/model_2/tf.keras.backend.binary_crossentropy/mul/BroadcastGradientArgs}}]] [Op:__inference_train_function_4735]
这是我的全部代码
def load_data4():
# Set path to directory containing images
path_to_images = '/content/drive/MyDrive/heatsource_img/Practice'
# Define regular expression pattern to extract coordinates
pattern = r'x_(\d+)y_(\d+)\.jpg'
# Initialize empty lists to store image data and corresponding coordinates
images = []
heatmaps = []
coordinates = []
# Loop through images and extract data and coordinates
for filename in os.listdir(path_to_images):
match = re.search(pattern, filename)
if match:
x_coord = int(match.group(1))
y_coord = int(match.group(2))
img = Image.open(os.path.join(path_to_images, filename))
img = img.resize((200, 200)) # resize image to desired dimensions
img_array = np.array(img) # convert image to numpy array
# Convert image to grayscale if it is not already grayscale
if len(img_array.shape) == 3 and img_array.shape[2] == 3:
img_array = cv2.cvtColor(img_array, cv2.COLOR_RGB2GRAY)
# Check if image is of type uint8, and convert it to uint8 if necessary
if img_array.dtype != 'uint8':
img_array = img_array.astype('uint8')
# Normalize pixel values of input image to be between 0 and 1
img_array = img_array / 255.0
# Add input image and corresponding output image to lists
heatmaps.append(img_array)
images.append(cv2.imread(os.path.join(path_to_images, filename)))
coordinates.append([x_coord, y_coord])
# Convert lists to numpy arrays
images = np.array(images)
heatmaps = np.array(heatmaps)
coordinates = np.array(coordinates)
# Split data into training and validation sets
X_train, X_val, y_train, y_val, coords_train, coords_val = train_test_split(heatmaps, images, coordinates, test_size=0.2, random_state=42)
return X_train, y_train, coords_train, X_val, y_val, coords_val
#Model
input_shape=(200,200,1)
inputs = Input(shape=input_shape)
x = Conv2D(filters=16, kernel_size=3, padding='valid', activation='relu')(inputs)
x = Conv2D(filters=32, kernel_size=3, padding='valid', activation='relu')(x)
x = Conv2D(filters=64, kernel_size=3, padding='valid', activation='relu')(x)
x = Conv2D(filters=128, kernel_size=3, padding='valid', activation='relu')(x)
x = Conv2D(filters=256, kernel_size=3, padding='same', activation='relu')(x)
x = Flatten()(x)
x = Dense(units=128, activation='relu')(x)
# Define latent variables
latent_dim = 10
mu = Dense(units=latent_dim)(x)
log_var = Dense(units=latent_dim)(x)
# Reparameterization trick
def sampling(args):
mu, log_var = args
epsilon = K.random_normal(shape=K.shape(mu))
return mu + K.exp(log_var / 2) * epsilon
# Sample latent variables
z = Lambda(sampling)([mu, log_var])
# Decoder
x = Dense(units=128, activation='relu')(z)
x = Dense(units=8 * 8 * 128, activation='relu')(x)
x = Reshape(target_shape=(8, 8, 128))(x)
x = Conv2DTranspose(filters=128, kernel_size=3, strides=2, padding='same', activation='relu')(x)
x = Conv2DTranspose(filters=64, kernel_size=3, strides=2, padding='same', activation='relu')(x)
x = Conv2DTranspose(filters=32, kernel_size=3, strides=2, padding='same', activation='relu')(x)
x = Conv2DTranspose(filters=16, kernel_size=3, strides=2, padding='same', activation='relu')(x)
x = Conv2DTranspose(filters=1, kernel_size=3, strides=1, padding='same', activation='linear')(x)
model = Model(inputs=inputs, outputs=x)
# VAE loss function
def vae_loss(inputs, outputs):
reconstruction_loss = binary_crossentropy(K.flatten(inputs), K.flatten(outputs))
reconstruction_loss *= input_shape[0] * input_shape[1] * input_shape[2]
kl_loss = 1 + log_var - K.square(mu) - K.exp(log_var)
kl_loss = K.sum(kl_loss, axis=-1)
kl_loss *= -0.5
vae_loss = K.mean(reconstruction_loss + kl_loss)
return vae_loss
# Compile the model
model = Model(inputs=inputs, outputs=x)
model.add_loss(vae_loss(inputs, x))
model.compile(optimizer='adam')
# Generate some data for testing
X_train, y_train, coords_train, X_val, y_val, coords_val = load_data4()
# Train the model
model.fit(X_train, y_train, epochs=10, batch_size=16, validation_data=(X_val, y_val))```