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

LSTM层调用触发TypeError:输入数据类型为字符串不被允许

问题解决:LSTM训练时的字符串类型错误

错误原因

你的temp变量是字符串类型,而LSTM层仅支持数值型输入(如float32、int32等),类型不匹配导致报错。查看数据集可知,Daily minimum temperatures列的数值可能带有空格或非数字字符,导致pandas默认将其识别为字符串。

解决方案

读取数据后先将温度列转换为数值类型,具体步骤:

  • 用pd.to_numeric清理非数字内容,无法转换的值设为NaN
  • 填充转换产生的NaN值(示例用均值填充,可按需调整)

修改后的关键代码片段

data = pd.read_csv('/content/daily-minimum-temperatures-in-me.csv')
# 转换温度列为数值型,处理异常值
data['Daily minimum temperatures'] = pd.to_numeric(data['Daily minimum temperatures'], errors='coerce')
# 填充缺失值
data['Daily minimum temperatures'] = data['Daily minimum temperatures'].fillna(data['Daily minimum temperatures'].mean())

# 后续代码不变
dates = data['Date'].values
temp  = data['Daily minimum temperatures'].values

完整可运行代码

import numpy as np
import pandas as pd
from keras.layers import Dense, LSTM
import matplotlib.pyplot as plt
import tensorflow as tf

data = pd.read_csv('/content/daily-minimum-temperatures-in-me.csv')
# 转换温度列为数值型并处理缺失值
data['Daily minimum temperatures'] = pd.to_numeric(data['Daily minimum temperatures'], errors='coerce')
data['Daily minimum temperatures'] = data['Daily minimum temperatures'].fillna(data['Daily minimum temperatures'].mean())

data.head(20)
data.isnull().sum()

dates = data['Date'].values
temp  = data['Daily minimum temperatures'].values

plt.figure(figsize=(15,5), dpi=100)
plt.plot(dates, temp)
plt.title('Temperature average', fontsize=16);

def windowed_dataset(series, window_size, batch_size, shuffle_buffer):
    series = tf.expand_dims(series, axis=-1)
    ds = tf.data.Dataset.from_tensor_slices(series)
    ds = ds.window(window_size + 1, shift=1, drop_remainder=True)
    ds = ds.flat_map(lambda w: w.batch(window_size + 1))
    ds = ds.shuffle(shuffle_buffer)
    ds = ds.map(lambda w: (w[:-1], w[-1:]))
    return ds.batch(batch_size).prefetch(1)

train_set = windowed_dataset(temp, window_size=60, batch_size=100, shuffle_buffer=1000)
model = tf.keras.models.Sequential([
  tf.keras.layers.LSTM(60, return_sequences=True),
  tf.keras.layers.LSTM(60),
  tf.keras.layers.Dense(30, activation="relu"),
  tf.keras.layers.Dense(10, activation="relu"),
  tf.keras.layers.Dense(1),
])

optimizer = tf.keras.optimizers.SGD(lr=1.0000e-04, momentum=0.9)
model.compile(loss=tf.keras.losses.Huber(),
              optimizer=optimizer,
              metrics=["mae"])
history = model.fit(train_set,epochs=100)

验证方法

运行print(temp.dtype),输出应为float64,确认数据类型正确后再训练模型,即可解决该错误。

内容的提问来源于stack exchange,提问作者RayzioJax

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 11:24:28