【问题标题】:ValueError: Data cardinality is ambiguous: x sizes: 150000 y sizes: 50000 Make sure all arrays contain the same number of samplesValueError:数据基数不明确:x 大小:150000 y 大小:50000 确保所有数组包含相同数量的样本
【发布时间】:2021-07-22 16:17:18
【问题描述】:

您好,我使用了此代码并出现错误

ValueError: Data cardinality is ambiguous: x sizes: 150000y sizes: 50000
Make sure all arrays contain the same number of samples.

我尝试更改 reshape 选项,甚至更改 numpy.transpose 但没有人可以帮忙吗?

import numpy as np
import tensorflow as tf
from tensorflow.keras import datasets, layers, models
from tensorflow.keras.layers import Dense, Dropout, Activation, Flatten, Conv2D, MaxPooling2D

(x_train, y_train) , (x_test, y_test) = datasets.cifar10.load_data()

#x_train.shape #(50000, 32, 32, 3) 
#x_test.shape  #(10000, 32, 32, 3)


x_train = x_train.reshape(-1, 32, 32, 1)
x_test = x_test.reshape(-1, 32, 32 ,1)


x_train = x_train.astype('float32')         # change integers to 32-bit floating point numbers 
x_test = x_test.astype('float32')
x_train /= 255.0              
x_test /= 255.0


model = tf.keras.models.Sequential() 
model.add(tf.keras.layers.Conv2D(32, (3, 3), padding='same', activation='relu')) 
model.add(tf.keras.layers.MaxPooling2D(pool_size=(2, 2), strides=(2,2))) 
model.add(tf.keras.layers.Conv2D(64, (3, 3), padding='same', activation='relu')) 
model.add(tf.keras.layers.MaxPooling2D(pool_size=(2, 2), strides=(2,2))) 
model.add(tf.keras.layers.Conv2D(128, (3, 3), padding='same', activation='relu')) 
model.add(tf.keras.layers.MaxPooling2D(pool_size=(2, 2), strides=(2,2)))
model.add(tf.keras.layers.Conv2D(256, (3, 3), padding='same', activation='relu')) 
model.add(tf.keras.layers.MaxPooling2D(pool_size=(2, 2), strides=(2,2)))
model.add(tf.keras.layers.Conv2D(512, (3, 3), padding='same', activation='relu')) 
model.add(tf.keras.layers.MaxPooling2D(pool_size=(2, 2), strides=(2,2)))

model.add(tf.keras.layers.Flatten()) 
model.add(tf.keras.layers.Dense(512, activation=tf.nn.relu)) 
model.add(tf.keras.layers.Dense(512, activation=tf.nn.relu))
model.add(tf.keras.layers.Dense(10, activation=tf.nn.softmax)) 
model.compile(loss='sparse_categorical_crossentropy', optimizer='adam', metrics=['accuracy']) 
model.build(input_shape=(512,32,32,1)) 
model.summary() 

model.fit(x_train, y_train, batch_size=1000, epochs=1) 




score = model.evaluate(x_test, y_test) 
print('Test loss:', score[0]) 
print('Test accuracy:', score[1])


predictions = model.predict([x_test])
#print(predictions)

print(np.argmax(predictions[0]))

img_path = x_test[0]
print(img_path.shape)
if(len(img_path.shape) == 3):
plt.imshow(np.squeeze(img_path))
elif(len(img_path.shape) == 2):
plt.imshow(img_path)
else:
print("Higher dimensional data")

【问题讨论】:

  • 请添加完整的回溯,而不仅仅是其中的一部分。

标签: python tensorflow machine-learning keras deep-learning


【解决方案1】:

您必须进行一些更改。我给你写个例子

import numpy as np
import tensorflow as tf
from tensorflow.keras import datasets, layers, models
from tensorflow.keras.layers import Dense, Dropout, Activation, Flatten, Conv2D, MaxPooling2D

(x_train, y_train) , (x_test, y_test) = datasets.cifar10.load_data()
x_train = x_train.astype('float32')         
x_test = x_test.astype('float32')
x_train /= 255.0              
x_test /= 255.0

model = tf.keras.models.Sequential() 
model.add(tf.keras.layers.InputLayer(input_shape=(32,32,3)))
model.add(tf.keras.layers.Conv2D(32, (3, 3), padding='same', activation='relu')) 
model.add(tf.keras.layers.MaxPooling2D(pool_size=(2, 2), strides=(2,2))) 
model.add(tf.keras.layers.Flatten())
model.add(tf.keras.layers.Dense(10, activation=tf.nn.softmax)) 

model.compile(loss='sparse_categorical_crossentropy', optimizer='adam', metrics=['accuracy']) 

model.summary() 

model.fit(x_train, y_train, batch_size=32, epochs=1) 

变化:

  1. 您无需重新调整 x_train、x_test,因为它们的形状已经正确。
  2. 最好使用tf.keras.layers.InputLayer,而不是稍后再构建模型。
  3. 我没有做这个改变,但你应该尽可能使用tf.keras.Sequential 来制作模型。 (更具可读性,不易出错)。 Functional api(或您当前的方法)适用于您需要制作一些复杂架构的情况。
  4. 您现在可以增加模型(更多层)。我用了几个只是为了给你看一个例子。
  5. InputLayer 中的input_shape 被视为(batch_size, img_width, img_height, img_channels),因为batch_size 可能是不统一的,因此默认情况下被视为None,因此我们不提供它,因此我们只传递@ 987654330@ 和你的输入有 32 imgwith 32 imgheight and 3 channels 我们传递它(32, 32, 3)

如果它解决了您的问题,请点赞或打绿勾。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-10-07
    • 2021-09-10
    • 2023-03-23
    • 2021-02-07
    • 2021-07-25
    • 2022-11-11
    • 2021-09-16
    • 2020-10-17
    相关资源
    最近更新 更多