Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 凯拉斯:精度保持为零_Python_Python 3.x_Keras - Fatal编程技术网

Python 凯拉斯:精度保持为零

Python 凯拉斯:精度保持为零,python,python-3.x,keras,Python,Python 3.x,Keras,我正试图与Keras一起进入机器学习领域 我不是数学家,我对神经网络的工作原理只有一个基本的了解(哈哈,明白吗?),所以对我放轻松点 这是我当前的代码: from keras.utils import plot_model from keras.models import Sequential from keras.layers import Dense from keras import optimizers import numpy # fix random seed for reprod

我正试图与Keras一起进入机器学习领域

我不是数学家,我对神经网络的工作原理只有一个基本的了解(哈哈,明白吗?),所以对我放轻松点

这是我当前的代码:

from keras.utils import plot_model
from keras.models import Sequential
from keras.layers import Dense
from keras import optimizers
import numpy

# fix random seed for reproducibility
numpy.random.seed(7)

# split into input (X) and output (Y) variables
X = []
Y = []
count = 0

while count < 10000:
    count += 1
    X += [count / 10000]
    numpy.random.seed(count)
    #Y += [numpy.random.randint(1, 101) / 100]
    Y += [(count + 1) / 100]
print(str(X) + ' ' + str(Y))

# create model
model = Sequential()
model.add(Dense(50, input_dim=1, kernel_initializer = 'uniform', activation='relu'))
model.add(Dense(50, kernel_initializer = 'uniform', activation='relu'))
model.add(Dense(1, kernel_initializer = 'uniform', activation='sigmoid'))

# Compile model
opt = optimizers.SGD(lr=0.01)
model.compile(loss='binary_crossentropy', optimizer=opt, metrics=['accuracy'])

# Fit the model
model.fit(X, Y, epochs=150, batch_size=100)

# evaluate the model
scores = model.evaluate(X, Y)
predictions = model.predict(X)
print("\n%s: %.2f%%" % (model.metrics_names[1], scores[1]*100))
print (str(predictions))
##plot_model(model, to_file='C:/Users/Markus/Desktop/model.png')
来自keras.utils导入plot\u模型
从keras.models导入顺序
从keras.layers导入稠密
来自keras导入优化器
进口numpy
#固定随机种子的重复性
随机种子(7)
#分为输入(X)和输出(Y)变量
X=[]
Y=[]
计数=0
当计数小于10000时:
计数+=1
X+=[计数/10000]
numpy.random.seed(计数)
#Y+=[numpy.random.randint(1101)/100]
Y+=[(计数+1)/100]
打印(str(X)+''+str(Y))
#创建模型
模型=顺序()
add(密集型(50,input_dim=1,kernel_initializer='uniform',activation='relu'))
add(稠密(50,kernel_初始值设定项='uniform',activation='relu'))
add(稠密(1,kernel_初始值设定项='uniform',activation='sigmoid'))
#编译模型
opt=optimizers.SGD(lr=0.01)
compile(loss='binary\u crossentropy',optimizer=opt,metrics=['accurity'])
#符合模型
模型拟合(X,Y,历次=150,批次大小=100)
#评估模型
分数=模型。评估(X,Y)
预测=模型。预测(X)
打印(“\n%s:%.2f%%”%(model.metrics_名称[1],分数[1]*100))
打印(str(预测))
##plot_model(model,to_file='C:/Users/Markus/Desktop/model.png')

精度保持为零,预测值为1的数组。我做错了什么?

看起来您正在尝试使用
二进制交叉熵
损失函数进行二进制分类。但是,类标签
Y
是浮动的。标签应为0或1。因此,最大的问题在于为训练模型提供的输入数据

您可以尝试一些更有意义的数据,例如,从两个不同的正态分布中采样数据的两个类,每个观测值的标签为0或1:

X = np.concatenate([np.random.randn(10000)/2, np.random.randn(10000)/2+1])

Y = np.concatenate([np.zeros(10000), np.ones(10000)])

模型应该能够处理此类数据。

从我所看到的情况来看,您试图解决的是回归问题(浮点函数输出),而不是分类问题(一个热向量样式输出/将输入放入类别)

您的sigmoid最终层将只提供介于0和1之间的输出,这显然限制了NNs预测所需Y值范围的能力,而Y值的范围会上升得更高。您的NN正试图尽可能接近它,但您正在限制它!输出层中的sigmoid适用于单类yes/no输出,但不适用于回归

所以,你希望你的最后一层有一个线性激活,其中输入只是求和。像这样的东西而不是乙状结肠。
model.add(密集型(1,内核初始化器='lecun\u normal',激活='linear'))

那么它可能会起作用,至少如果学习率足够低的话


谷歌“keras回归”搜索有用的链接。

有没有一种方法可以进行浮动预测?是的,你可以。您需要将损失函数更改为类似于均方误差的值。检查此项:[]()。另外,你可能想移除最后一层中的乙状结肠激活…好的,我成功了。但是损失减少了很小的一步,几乎没有。你会推荐哪种参数的网络?很难说。要做的一件事是在数据集的一小部分上进行训练,并对其进行过度拟合(损失接近0)。您可以尝试两件事:优化器的不同学习率,以及不同的优化器。大多数优化器可能比SGD工作得更好。在您的示例中,更改您正在使用的优化器-SGD的LR参数。亚当是一个很好的违约乐观主义者,而不是新加坡元。