使用Keras构建神经网络时遇数组形状无效错误求助
问题分析与解决方法
嘿,我帮你找出代码里的几个关键问题啦,这就是你运行出错的核心原因:
主要错误点
- 变量赋值完全混乱:你把训练数据、测试数据、标签的赋值全搞混了,直接导致模型输入的维度和类型完全不符合要求:
- 你错误地将
y_train赋值为测试数据的向量化结果,这应该是x_test的内容 - 你用
train_labels覆盖了之前正确生成的x_train,这让模型训练时输入的不是文本向量化后的特征(维度(25000, 10000)),而是一维的标签数据(维度(25000,)),模型肯定会报错 - 你漏了给
y_train正确赋值,应该把训练标签转成float32类型
- 你错误地将
- 未定义
x_test变量:后面调用model.evaluate(x_test, y_test)时,x_test根本没定义,会触发NameError
修正后的完整代码
from keras.datasets import imdb import numpy as np from keras import models from keras import layers # 加载数据集 (train_data, train_labels), (test_data, test_labels) = imdb.load_data(num_words=10000) # 向量化序列函数 def vectorize_sequences(sequences, dimension=10000): results = np.zeros((len(sequences), dimension)) for i, sequence in enumerate(sequences): results[i, sequence] = 1. return results # 正确赋值:训练数据、测试数据向量化,标签转成float32 x_train = vectorize_sequences(train_data) x_test = vectorize_sequences(test_data) # 修正:这里应该是x_test y_train = np.asarray(train_labels).astype('float32') # 修正:定义y_train y_test = np.asarray(test_labels).astype('float32') # 构建模型 model = models.Sequential() model.add(layers.Dense(16, activation='relu', input_shape=(10000,))) model.add(layers.Dense(16, activation='relu')) model.add(layers.Dense(1, activation='sigmoid')) # 编译与训练 model.compile(optimizer='rmsprop', loss='binary_crossentropy', metrics=['accuracy']) model.fit(x_train, y_train, epochs=4, batch_size=512) # 评估模型 results = model.evaluate(x_test, y_test) print(results)
关键修改说明
- 将
y_train = vectorize_sequences(test_data)改为x_test = vectorize_sequences(test_data):正确生成测试集的特征数据 - 新增
y_train = np.asarray(train_labels).astype('float32'):正确定义训练集标签 - 删除了覆盖
x_train的错误代码x_train = np.asarray(train_labels).astype('float32'):保留了正确的训练特征数据
这样修改后,模型的输入特征(x_train、x_test)维度是(样本数, 10000),标签(y_train、y_test)是一维的float32类型,完全符合模型的要求,就能正常运行啦。
内容的提问来源于stack exchange,提问作者rmahesh
相关产品推荐
相关产品推荐

