TensorFlow构建LSTM模型运行fit时报NoneType无dtype属性如何解决
问题原因
你使用的是TensorFlow 1.x版本,该版本的Keras Sequential模型在未显式指定输入形状、也没有手动触发build逻辑的情况下,不会在fit阶段自动完成模型权重的初始化推导,导致模型输出张量为None,读取dtype属性时就触发了本次报错。
解决方案
有两种可行的修改方式,任选其一即可:
- 方式1:在LSTM层定义时显式指定输入形状,你的单条样本维度为(240,1),直接给第一层加input_shape参数
- 方式2:在
model.compile之后、model.fit之前,手动调用model.build(input_shape=(None, 240, 1))完成模型初始化,其中None代表样本数量可变
修正后可运行的完整代码
import os os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' import tensorflow as tf import pandas as pd import numpy as np # 方式1:定义时指定输入形状 model = tf.keras.models.Sequential([ tf.keras.layers.LSTM(8, input_shape=(240, 1)), tf.keras.layers.Dense(units = 2) ]) loss_fn = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True) model.compile(optimizer=tf.keras.optimizers.Adam(0.001), loss = loss_fn) x_train = np.random.randn(210,240,1) y_train = np.random.binomial(1, 0.5,(210,)) # 方式2:如果不用方式1,取消下面一行注释即可 # model.build(input_shape=(None, 240, 1)) model.fit(x_train, y_train, epochs=20)
内容的提问来源于stack exchange,提问作者zlq147
相关产品推荐
相关产品推荐

