Skip to main content

Failed to convert a NumPy array to a Tensor, when trying to train the image model

I'm trying to train a model of image recognition.But the model.fit is always returning the error:

ValueError                                Traceback (most recent call last)
Cell In\[106\], line 1
\----\> 1 history = model.fit(x_train, batch_size=batch_size, epochs=epochs)

File c:\\Users\\rochav3\\Anaconda\\envs\\py_OBJ_DETECTION\\lib\\site-packages\\keras\\utils\\traceback_utils.py:67, in filter_traceback..error_handler(\*args, \*\*kwargs)
65 except Exception as e:  # pylint: disable=broad-except
66   filtered_tb = \_process_traceback_frames(e.__traceback__)
\---\> 67   raise e.with_traceback(filtered_tb) from None
68 finally:
69   del filtered_tb

File c:\\Users\\rochav3\\Anaconda\\envs\\py_OBJ_DETECTION\\lib\\site-packages\\tensorflow\\python\\framework\\constant_op.py:102, in convert_to_eager_tensor(value, ctx, dtype)
100     dtype = dtypes.as_dtype(dtype).as_datatype_enum
101 ctx.ensure_initialized()
\--\> 102 return ops.EagerTensor(value, ctx.device_name, dtype)

ValueError: Failed to convert a NumPy array to a Tensor (Unsupported object type numpy.ndarray).

I saw some other topics related to this here, but nothing solved my problem, the float32 also did not solved.

Follow below my code.

Basically, I'm getting a dataset from a pickle file, with PILLOW images and converting them to grayscale and converting to numpy arrays.

`# %%
import tensorflow as tf
import cv2
import pickle
import numpy as np
from sklearn.model_selection import train_test_split
import random
import pandas as pd
import PIL
from PIL import ImageOps
with open('C:\Visual Studio\Django\DetectTool\OpenClosed_dataset.pickle', 'rb') as f:
    data = pickle.load(f)

# %%
np_data =[]
tam_data = len(data[0])

for i in range(tam_data):
    np_data.append((np.asarray(ImageOps.grayscale(data[0][i])),
    np.asarray(data[1][i])))

# %%
ds_Valves = []
for i in range(100):
    ds_Valves.append((np_data[i][0], np_data[i][1])) 

# %%
random.shuffle(ds_Valves)

df_Valves = pd.DataFrame(ds_Valves)

df_Valves.rename(columns= {0 : 'Image', 1: 'State'}, inplace= True)


# %%
df_X = df_Valves['Image']
df_Y = df_Valves.drop(columns=['Image'])

# %%
df_X = np.asarray(df_X).astype('object')
df_Y = np.asarray(df_Y).astype('float32')


# %%
x_train, x_test, y_train, y_test = train_test_split(df_X, df_Y, test_size=0.20, random_state=0 )

# %%
# Defina os hiperparâmetros do modelo
batch_size = 32
epochs = 10
learning_rate = 0.001

# %%
# Escolha uma arquitetura de modelo e compile-o
model = tf.keras.models.Sequential([
    tf.keras.layers.Conv2D(32, (3, 3), activation='relu', input_shape=(510, 510,3)),
    tf.keras.layers.MaxPooling2D((2, 2)),
    tf.keras.layers.Conv2D(64, (3, 3), activation='relu'),
    tf.keras.layers.MaxPooling2D((2, 2)),
    tf.keras.layers.Conv2D(128, (3, 3), activation='relu'),
    tf.keras.layers.MaxPooling2D((2, 2)),
    tf.keras.layers.Flatten(),
    tf.keras.layers.Dense(512, activation='relu'),
    tf.keras.layers.Dense(3, activation='softmax')
])

# %%
model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=learning_rate),
              loss='categorical_crossentropy',
              metrics=['accuracy'])

# %%
history = model.fit(x_train, batch_size=batch_size, epochs=epochs)`

I saw some other topics related to this here, but nothing solved my problem, the float32 also did not solved.

Update: Just found a workaround here.

  • changed my dataset from .PNG to .JPG
  • Instead of using PIL, I used cv2
  • I created the tensor during the dataset creation.

I believe the mistake was that I was trying to create the tensor with the PIL image "in memory" and not the file.



source https://stackoverflow.com/questions/76006839/failed-to-convert-a-numpy-array-to-a-tensor-when-trying-to-train-the-image-mode

Comments

Popular posts from this blog

Why is my reports service not connecting?

I am trying to pull some data from a Postgres database using Node.js and node-postures but I can't figure out why my service isn't connecting. my routes/index.js file: const express = require('express'); const router = express.Router(); const ordersCountController = require('../controllers/ordersCountController'); const ordersController = require('../controllers/ordersController'); const weeklyReportsController = require('../controllers/weeklyReportsController'); router.get('/orders_count', ordersCountController); router.get('/orders', ordersController); router.get('/weekly_reports', weeklyReportsController); module.exports = router; My controllers/weeklyReportsController.js file: const weeklyReportsService = require('../services/weeklyReportsService'); const weeklyReportsController = async (req, res) => { try { const data = await weeklyReportsService; res.json({data}) console...

How to show number of registered users in Laravel based on usertype?

i'm trying to display data from the database in the admin dashboard i used this: <?php use Illuminate\Support\Facades\DB; $users = DB::table('users')->count(); echo $users; ?> and i have successfully get the correct data from the database but what if i want to display a specific data for example in this user table there is "usertype" that specify if the user is normal user or admin i want to user the same code above but to display a specific usertype i tried this: <?php use Illuminate\Support\Facades\DB; $users = DB::table('users')->count()->WHERE usertype =admin; echo $users; ?> but it didn't work, what am i doing wrong? source https://stackoverflow.com/questions/68199726/how-to-show-number-of-registered-users-in-laravel-based-on-usertype

The number of nodes and edges I calculated manually and by a method provided by networkx library dont match

I am trying to analyse a graph using networkx library in Python. I have implemented a function that returns the nodes and edges of that graph. After that I counted the number of nodes and edges by implementing the len() function for nodes and edges, which gave me 17 for both nodes and edges. However, when I used the method graph.number_of_nodes() of networkx library it gave me 53. My code: import pandas as pd import networkx as nx import matplotlib.pyplot as plt header_list = ["a","b","w"] E =pd.read_csv("aves-barn-swallow-contact-network.edges",sep=" ",header= None,names=header_list) # print(E.head()) # prints first few rows of the csv file G = nx.from_pandas_edgelist(E,"a","b",["w"]) nx.draw(G) plt.show() class GraphAnalyse: #finding nodes and edges def nodeEdge(self,Graph): nodes = Graph.nodes() edges = Graph.edges() ...