我是Python的新手(尽管不熟悉编程-我通常使用JavaScript编程),并且对AI开发非常感兴趣。
最近,我一直在尝试遵循this article来开发深度学习算法。
我的目标是根据包含大列表的CSV文件来预测一组7个数字,每行也包含7个数字。列表的顺序很重要。
我最终得到了以下代码:
from keras.models import Sequential
from keras.layers import Dense
from sklearn.model_selection import train_test_split
from numpy import loadtxt, random
random.seed(seed)
dataset = loadtxt("data/Lotto.csv", delimiter=",", skiprows=1)
X = dataset[:, 0:7]
Y = dataset[:, 6]
(X_train, X_test, Y_train, Y_test) = train_test_split(X, Y, test_size=0.33, random_state=4)
model = Sequential()
model.add(Dense(8, input_dim=7, kernel_initializer="uniform", activation="relu"))
model.add(Dense(6, kernel_initializer="uniform", activation="relu"))
model.add(Dense(1, kernel_initializer="uniform", activation="sigmoid"))
model.compile(loss="binary_crossentropy", optimizer="adam", metrics=["accuracy"])
model.fit(X_train, Y_train, validation_data=(X_test, Y_test), epochs=100, batch_size=5, shuffle=False)
scores = model.evaluate(X_test, Y_test)
print("Accuracy: %.2f%%" %(scores[1] * 100))
在Google Colaboratory中运行它之后,虽然我没有遇到任何错误-我注意到对于每个时期,丢失结果都不会改变,结果,我的准确性一直很低(〜6%)。
我在做什么错了?
答案 0 :(得分:0)
尝试将优化器更改为 <repositories>
<repository>
<id>cloudfront-snapshots</id>
<name>***</name>
<url>https://maven.***.net/</url>
</repository>
<repository>
<id>jcenter-snapshots</id>
<name>jcenter</name>
<url>https://jcenter.bintray.com/</url>
</repository>
<repository>
<id>maven.***</id>
<url>s3://***-maven-repo/</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>maven.***</id>
<url>s3://***-maven-repo/</url>
</pluginRepository>
</pluginRepositories>
<distributionManagement>
<repository>
<id>maven.***</id>
<url>s3://***-maven-repo/</url>
</repository>
<snapshotRepository>
<id>maven.***</id>
<url>s3://***-maven-repo/</url>
</snapshotRepository>
</distributionManagement>
,学习率约为0.0001。
RMSprop通常比大多数优化器要好,并且比其他优化器具有更好的准确性和更少的损失。您也可以尝试SGD,它也是一个很好的优化程序。
还增加了参数的数量,因为更多的可训练参数导致模型被更精确地训练并且给出了非常准确的预测。
您可以将代码更新为tensorflow 2.x并将代码更改为:
RMSprop
答案 1 :(得分:0)
如果我错了,请纠正我,但是从外观上看,您输入的是7个数字的列表,您想在该列表中输出第7个数字。现在,通过在最后一层中使用S形激活,可以将模型输出限制为间隔(0,1)。您确定您的数据在此间隔内吗?
此外,对于该任务,您的模型很复杂。您确实只需要一个没有激活或偏见的致密层就可以做到这一点。