python - 如何为深度学习模型设置激活或优化器只接受 RNN 的 1,0
问题描述
例如
我有这样的时间序列数据
[[1,0,0,0] [1,0,0,1],[1,0,1,0],[1,1,0,0]],,,,
它从过去的两个预测下一个。
我想放[[1,0,0,0],[1,0,0,1]]
和得到[1,0,1,0]
所以我做了下面这样的模型。
input_len = 2
n_in = 4
n_hidden = 512
model = Sequential()
model.add(LSTM(n_hidden, input_shape=(input_len,n_in), return_sequences=True))
model.add(Dropout(0.1))
model.add(LSTM(n_hidden, return_sequences=False))
model.add(Dense(n_hidden, activation="linear"))
model.add(Dense(n_in, activation="linear"))
opt = Adam(lr=0.001)
model.compile(loss='mse', optimizer=opt)
model.summary()
#trainning and validate data
X #X.shape (800, 2, 4) [ [[1,0,0,1],[1,0,0,1]],[[1,0,0,1],[1,0,0,0]],,,
Y #Y.shape (200, 2, 4)
val_x #val_x.shape (800,1,4) [[1,0,1,0]][1,1,1,0],,,,
val_y #val_y.shape (200,1,4)
history = model.fit(x, y, epochs=50,validation_data=(val_x, val_y))
#then predict
in_ = np.array[[1,0,0,1][1,1,1,1]]
out_ = model.predict(in_)
print(out_)
我期望结果至少是1
or 0
。
但是我得到这样的号码[[4.9627638e-01 1.4797167e-01 3.3314908e-01 1.3892795e-04]]
我想这与activation
或optimizer
...有关
我对么?或者我应该如何处理 1 和 0 数据?
更改linear
为relu
结果变为之间[0.41842282 0.1275532 0. 0.4288069]
但是它仍然不是 0 或 1....
解决方案
模型输出不能是离散的,因为它应该是可微的。尝试添加类似的内容:
out_ = tf.cast(tf.math.greater(out_, 0.5), tf.int32)
这不是正确的预测,但准确性取决于您的数据(例如,如果您的数据是随机的并且没有模式 - 那么您将获得 6% 的准确性)。尝试仅基于[[1,0,0,0] [1,0,0,1],[1,0,1,0]]
以确保您的模型有效进行训练。
推荐阅读
- sql - 在 SQL 中为每个 id 引用添加列
- facebook - Facebook 显示页面帖子的权限
- shell - api curl脚本没有给出输出
- flutter - 如何修复 Flutter MaterialApp(not_enough_required_arguments)?
- javascript - 通过 HTML 文件输入上传 PSD/任何 Photoshop 文件不起作用
- mysql - 使用多唯一键插入重复键更新sql时出现死锁
- mysql - 使用内部联接表进行高级搜索
- html - 当两个元素向右浮动时,它们会切换位置
- kubernetes - 设置 Kubernetes - 无法从 Pod 访问 API
- ios - 是否可以在不使用 UIActivityViewController 或 UIDocumentInteractionController iOS 的情况下将 PDF 文件直接保存到文件中?