【问题标题】:Numerical input and binary classification数值输入和二进制分类
【发布时间】:2021-08-14 07:28:48
【问题描述】:

我仍在学习使用 tensorflow 进行深度学习,并且我在 LSTM 中移动了一点。我在 stabd LSTM 回归下做了几个模型。现在,我试图达到一个回归,但我想将标签值分类为大于或小于那时的分类。我已经尝试了几个现有的代码,但仍然没有明白这一点。

我的问题是关于以下代码:

model = Sequential()
model.add(LSTM(32,input_shape=(X_train.shape[1],X_train.shape[2]),return_sequences=True))
model.add(Activation('relu'))
model.add(Dropout(0.2))
model.add(LSTM(1))
model.add(Activation('relu'))
model.add(Dense(1))
model.compile(optimizer='adam',loss='binary_crossentropy',metrics=['accuracy'])
model.fit(scipy.stats.zscore(X_train),y_train>=0.05,epochs=10,validation_split=0.2)
p = model.predict(scipy.stats.zscore(X_test))

我的功能示例:

X_train[:2]

array([[[ 6.62364330e-04,  1.66358595e-02,  2.40295749e-02,
          1.84842884e-03,  1.84842884e-02, -1.06277840e+00,
          4.45218993e+01,  3.72895448e+07,  1.66694434e+04,
          4.86154015e+09,  7.67031510e-03],
        [ 6.62364330e-04,  1.47874307e-02,  1.66358595e-02,
          3.69685767e-03,  9.24214418e-03, -1.06706125e+00,
          4.10241215e+01,  1.89388276e+07,  1.49832496e+04,
          5.22004803e+09,  3.62809450e-03],
        [ 6.62364330e-04,  0.00000000e+00,  3.66300366e-03,
         -9.15750916e-03,  0.00000000e+00, -1.06193867e+00,
          4.10241215e+01,  1.09146703e+07,  1.14050891e+04,
          4.27086081e+09,  2.55561368e-03]],

       [[ 6.62364330e-04,  1.47874307e-02,  1.66358595e-02,
          3.69685767e-03,  9.24214418e-03, -1.06706125e+00,
          4.10241215e+01,  1.89388276e+07,  1.49832496e+04,
          5.22004803e+09,  3.62809450e-03],
        [ 6.62364330e-04,  0.00000000e+00,  3.66300366e-03,
         -9.15750916e-03,  0.00000000e+00, -1.06193867e+00,
          4.10241215e+01,  1.09146703e+07,  1.14050891e+04,
          4.27086081e+09,  2.55561368e-03],
        [ 6.62364330e-04, -1.97132616e-02, -1.79211470e-03,
         -2.68817204e-02, -1.07526882e-02, -1.04563298e+00,
          4.68368478e+01,  3.46075465e+07,  2.16567876e+04,
          4.76705234e+09,  7.25973706e-03]]])

y_train[:2]

array([-0.01075269, -0.00359712])

y_train[:2] >= 0.05

array([False, False])

另外,请注意标签的真假比为:

np.unique(y_train>=0.05, return_counts=True)
(array([False,  True]), array([164733,   4313]))

我的问题是:

  • 如何在相同标签的敌人中获得最终结果(真假)
  • 做错了什么?

【问题讨论】:

  • 预期输出是否相互依赖(顺序)?如果不使用 LSTM 真的没有多大意义,而且如果你正在做这样的分类,不要忘记在最后一层使用激活函数作为“softmax”或“sigmoid”。
  • 是的,输出是第二天的股票价格。问题上的数据只是一个例子。

标签: python tensorflow lstm


【解决方案1】:

首先,写一个机器学习模型解决一个问题有什么意义,一行代码就可以完美解决。

如果只是一个实验,

  1. 按照 Hakan 的建议摆脱 LTSM 层,输入是随机浮点数,它们之间没有任何关系。仅使用密集层。

  2. 您的最后一层是“线性”,在最后一层使用“sigmoid”会更有意义。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-02
    • 2020-05-15
    • 1970-01-01
    • 2018-05-30
    • 1970-01-01
    • 2015-09-12
    • 2016-06-01
    相关资源
    最近更新 更多