You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将列表格式的训练数据输入至Keras模型?

问题描述

刚接触TensorFlow与Keras,现有如下格式的训练数据集:

x_train = [[ 21   0   0 ...   0   0   0]
 [ 22   0   0 ...   0   0   0]
 [ 23   0   0 ...   0   0   0]
 ...
 [255   0   0 ...   0   0   0]
 [256   0   0 ...   0   0   0]
 [257   0   0 ...   0   0   0]]

y_train = [4 1 1 1 4 1 3 1 2 4 4 1 1 4 4 4 1 1 1 4 4 1 4 4 1 1 4 1 4 1 3 1 1 1 1 1 4
3 4 1 1 4 3 1 4 4 1 4 1 3 1 1 1 1 4 1 1 1 4 4 1 1 1 4 1 3 4 4 1 4 1 2 1 4
4 1 1 4 1 4 4 3 4 1 3 1 1 3 1 4 2 4 2 2 1 4 3 1 1 4 2 1 3 1 4 4 1 3 4 4 1
1 1 3 3 4 1 4 1 1 4 4 1 4 4 4 1 1 3 4 1 2 4 1 4 4 1 4 4 1 1 4 1 4 4 4 4 1
1 4 4 1 1 1 1 1 1 4 4 1 4 4 1 1 4 1 1 1 4 4 1 4 4 1 4 1 1 2 1 1 1 1 4 1 1
1 4 1 1 4 1 1 4 4 1 3 4 3 4 1 1 1 1 1 4 4 1 4 4 4 4 1 1 1 4 3 4 2 1 4 4 1
4 1 1 4 4 1 4 4 1 4 4 4 1 4 1 2 4 1 1 1 1 4 1 4 4 4 4 1 1 1 4 1 4 4 4 1 4
1 1 4 4]

参考网上教程尝试了以下代码,但模型无法接受列表输入,请问该如何将这些数据输入模型?

model = keras.Sequential([
    tf.keras.layers.Flatten(input_shape=(28, 28)),
    tf.keras.layers.Dense(128, activation='relu'),
    tf.keras.layers.Dropout(0.2),
    tf.keras.layers.Dense(10)
])
model.compile(optimizer='adam', loss = 'binary_crossentropy',metrics=['accuracy'])
model.fit(x_train, y_train, epochs=10, batch_size=32)
解决步骤

1. 转换数据格式为NumPy数组

Keras模型不直接支持Python列表作为输入,必须先将数据转换成NumPy数组:

import numpy as np

# 转换训练数据
x_train = np.array(x_train)
y_train = np.array(y_train)

2. 匹配输入数据与模型输入形状

你的Flatten层指定了input_shape=(28,28),意味着每个输入样本是28×28的二维数组。但从x_train的格式看,每个样本是一维列表,需按实际情况调整:

  • 如果每个样本长度是784(28×28),用reshape转成二维:
    x_train = x_train.reshape(-1, 28, 28)
    
  • 如果样本长度不是784,直接修改Flatten层的input_shape为实际的一维长度,比如input_shape=(N,),Flatten层会自动处理。

3. 修正多分类任务的模型配置

从y_train的标签值(1、2、3、4)来看,这是4分类任务,当前模型有两处错误需要修正:

  • 损失函数:binary_crossentropy是二分类专用,多分类应使用sparse_categorical_crossentropy(标签为整数格式时)
  • 输出层单元数:Dense(10)不符合4分类需求,应设置为4,同时可添加softmax激活函数输出概率

调整后的模型代码:

model = keras.Sequential([
    tf.keras.layers.Flatten(input_shape=(28, 28)),  # 确保与x_train形状匹配
    tf.keras.layers.Dense(128, activation='relu'),
    tf.keras.layers.Dropout(0.2),
    tf.keras.layers.Dense(4, activation='softmax')  # 4个类别,输出概率分布
])

model.compile(optimizer='adam', 
              loss='sparse_categorical_crossentropy',  # 适配整数标签的多分类损失
              metrics=['accuracy'])

4. 归一化输入数据(可选但推荐)

图像类数据归一化到0-1范围能提升模型训练效率:

x_train = x_train / 255.0  # 假设数据值范围为0-255

5. 启动模型训练

完成以上步骤后,即可正常调用fit方法训练模型:

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

内容的提问来源于stack exchange,提问作者Shreyas Krishna Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 13:05:05