关于Data cardinality is ambiguous:x sizes:y sizes: Make sure all arrays contain the same numbers

错误代码

def load_mat(path_data,name_data,reshapeSize,dtype='float32'):

    dataFile = path_data
    data1 = scio.loadmat(dataFile)
    r2 = data1[name_data]
    dataArr = np.reshape(r2, reshapeSize)
    return dataArr
Path = 'E:\**\PycharmProjects/testHandsTensor2/'  #自定义路径要正确
DataFile='covNum.mat'
LabelFile='label.mat'

print("Loading data and labels...")
Data=load_mat(Path+DataFile,'covNum',(6,60))

Label=np.hstack((np.ones((1,30)),np.zeros((1,30))))
print(Label)
print(np.shape(Label))

Indices=np.arange(Data.shape[1]) #随机打乱索引并切分训练集与测试集
np.random.shuffle(Indices)
print("Divide training and testing set...")
train_x=Data[:,Indices[:50]]
train_y=Label[:,Indices[:50]]
test_x=Data[:,Indices[50:]]
test_y=Label[:,Indices[50:]]
print("======================================")

tf.random.set_seed(0)
model = tf.keras.Sequential([tf.keras.layers.Dense(10,activation='relu',input_shape=(6,)),
                             tf.keras.layers.Dense(20,activation='relu',input_shape=(10,)),
                             tf.keras.layers.Dense(1,activation='sigmoid')])
model.summary()  #显示网络结构
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])  #定义优化方法为随机梯度下降,损失函数
# #x->训练集,y——>bia标签,epochs=10000训练的次数,validation_data=(test_x,test_y)——>验证集

print(np.shape(train_x),np.shape(train_y))
history = model.fit(train_x,train_y,epochs=1000,validation_data=(test_x,test_y))

错误原因

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

数据中训练集数据的shape是(6,50),标签格式是(1,50)。但是在tensorflow的网络中对数据的读取是横向选取一行作为一个样本,所以需要将train_x和test_x进行转置;
而且网络要求的一位普通标签格式需要是(50,)的,所以再对label再次reshape。

代码改动

Path = 'E:\*\PycharmProjects/testHandsTensor2/'  #自定义路径要正确
DataFile='covNum.mat'
LabelFile='label.mat'
print("Loading data and labels...")
Data=load_mat(Path+DataFile,'covNum',(6,60))
Label=np.hstack((np.ones((1,30)),np.zeros((1,30))))
Label=Label.reshape((60,))
print(Label)
print(np.shape(Label))
Indices=np.arange(Data.shape[1]) #随机打乱索引并切分训练集与测试集
np.random.shuffle(Indices)
print("Divide training and testing set...")
train_x=Data[:,Indices[:50]].T
train_y=Label[Indices[:50]]
test_x=Data[:,Indices[50:]].T
test_y=Label[Indices[50:]]
print("==================训练集数据和标签====================")
print(np.shape(train_x),np.shape(train_y))

结果
(50, 6) (50,)
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值