【发布时间】:2022-01-25 05:12:21
【问题描述】:
我有一组数据,前面有固定的 9 个数字,最后一个位置有 1 个数字作为未知规则中的校验和。我尝试建立一个学习模型来使用 Keras 找出它,但未能训练。
所以我使用校验和为 mod 10 的特定规则生成测试数据,但仍然无法训练。我对这 9 个数字进行 one-hot 编码,将数据集形成 (N,9,10) 的形状,然后发送到密集层,同时损失了交叉熵。
这是我的代码:
import numpy as np
from keras import Sequential
from keras.layers import Dense, Dropout, Flatten
from keras.utils import to_categorical
# generate test data
test_input = []
test_output = []
for _ in range(10000):
value = int(np.round(np.random.rand()*1E9,0))
chk = value % 10
no = str(value).rjust(9, '0')
test_input.append(no)
test_output.append(chk)
test_input = [[int(s) for s in c_no] for c_no in test_input]
test_input = to_categorical(test_input)
test_output = to_categorical(test_output)
# build model
model = Sequential()
model.add(Dense(50, input_shape=(9, 10), activation='relu'))
model.add(Dense(30, activation='relu'))
model.add(Dense(20, activation='relu'))
model.add(Flatten())
model.add(Dense(10))
model.summary()
# train model
epoch_num = 20
model.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy'])
history = model.fit(test_input, test_output, epochs=epoch_num, verbose=2, batch_size=50, validation_split=0.2)
但是,即使使用像这样简单的校验和规则,我的模型仍然无法成功训练。损失没有减少,准确率保持在0.1左右。
我想知道我犯了什么错误,谢谢!
【问题讨论】:
-
请不要更新您的问题,使现有答案变得无关紧要(回滚)。改为打开一个新问题(它是免费的!)。
标签: python machine-learning keras checksum