【问题标题】:Tensorflow / Keras LSTM errors "Function call stack: distributed_function"Tensorflow / Keras LSTM 错误“函数调用堆栈:distributed_function”
【发布时间】:2020-08-03 09:37:56
【问题描述】:

我正在使用堆叠 LSTM 进行多类分类,其中有 5 个“字符串”标签。 这是代码的sn-p:

# define parameters
#epochs, batch_size = 20, 46

epochs, batch_size = 5, 40
# define model
model = Sequential()
model.add(LSTM(128,input_shape=(X_train.shape[1],X_train.shape[2]),return_sequences=True))
model.add(LSTM(100, activation='relu',return_sequences=True))
model.add(LSTM(64, activation='relu'))
model.add(Dense(5, activation='softmax'))
model.compile(loss='sparse_categorical_crossentropy',
              optimizer='adam',
              metrics=['accuracy'])
#-------------------------------------------------------------------
history = model.fit(X_train, Y_train, 
                    epochs=epochs, 
                    batch_size=batch_size, 
                    verbose=1)

我收到了这个错误:

UnimplementedError:  Cast string to float is not supported
     [[node metrics/accuracy/Cast (defined at C:\Users\"emitted"LSTM.py:152) ]] [Op:__inference_distributed_function_4954348]

Function call stack:
distributed_function

我知道如何解决这个错误! 有谁知道可能是什么原因?以及如何调试这个错误?

【问题讨论】:

    标签: python tensorflow keras lstm softmax


    【解决方案1】:

    您似乎正试图将字符串数据直接输入网络。因此出现错误Cast string to float is not supported。如果您正在处理分类数据,则应首先将其转换为数字。根据您使用的分类数据的类型,应应用不同的技术。对于文本,请考虑阅读官方 Tensorflow guide on embedding。或者,如果您的数据由单个标记组成,例如 ToyotaBMWFord,请查看 category_encoders

    【讨论】:

    • 感谢您的回复。我已经将所有数据转换为浮点数,除了标签。标签是“字符串”,因此我使用了“sparse_categorical_crossentropy”。
    • Y_train 怎么样?你给它编码了吗?应该是一个从 0 到 4 的数字,用于稀疏训练损失。
    • 我没有隐瞒。我读到“sparse_categorical_crossentropy”可以在分类标签上执行,而无需将它们转换为单热编码或标签编码,来源 [dlology.com/blog/…]。因此,我使用了它。
    • 我更信任 TF 官方指南:“我们希望标签以整数形式提供。”tensorflow.org/api_docs/python/tf/keras/losses/…
    • 我刚刚将标签转换为数值,一切都很好。再次感谢@Aramakus。
    猜你喜欢
    • 2020-10-26
    • 2020-05-21
    • 1970-01-01
    • 1970-01-01
    • 2021-10-07
    • 2019-11-25
    • 2021-03-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多