gpt4 book ai didi

machine-learning - keras CNN 1-D -> 为什么所有预测类返回的结果相同?

转载 作者:行者123 更新时间:2023-11-30 08:46:03 24 4
gpt4 key购买 nike

我编写了 CNN 1-D 代码,但在执行 model.predict_classes(X) 命令时,所有返回的类都是相同的。返回示例如下屏幕所示。为什么所有预测类别的返回值相同?我已经将输入更改为不同的输入,结果仍然相同。

model = ke.models.Sequential() 
nbfeatures=5
model.add(Conv1D(filters=2,kernel_size=2,input_shape=(nbfeatures, 1),activation = 'relu'))
model.add(Conv1D(filters=2,kernel_size=2))
model.add( MaxPool1D(pool_size=2))
model.add( Flatten())
model.add(Dropout(0.4))
model.add( Dense(2))
model.add(Activation('softmax'))
sgd = optimizers.SGD(lr=0.01, nesterov=True, decay=1e-6, momentum=0.9)
model.compile(loss='sparse_categorical_crossentropy', optimizer=sgd, metrics=['accuracy'])

# get some data
#X = np.expand_dims(np.random.randn(1000, 5), axis=2)
X = np.expand_dims([[1,2,3,4,5],[1,1,1,1,1],[1,2,3,4,5],[1,2,3,4,5], [1,2,3,4,5],[1,1,1,1,1],[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5]], axis=2)
#y = [np.random.randint(0,2) for p in range(0,10)]
y=[[1],[0],[1],[1],[1],[0],[1],[1],[1],[1]]
y=np.array(y)
y = np.reshape(np.array(y), (y.shape[0],1))

# fit model
model.fit(X, y,batch_size=5, epochs=3, verbose=1)
predictions = model.predict(X)
Y_predict = model.predict_classes(X)

screen - output CNN

最佳答案

经过试验后,我认为问题是由于训练示例数量较少以及 2 个类中每个类的所有示例都是相同的这一事实造成的。正如马蒂亚斯所说,培训类的不平衡也不理想。但是,实际上,我认为相同的示例会导致最多的问题,因为调整权重的学习路径对于每个类别的所有示例都是相同的。

因此,由于训练示例如此之少,您需要增加迭代次数或增加过滤器数量(或两者兼而有之)。学习率也可以在这里发挥作用,但正确调整比较困难。

我想出的似乎工作可靠的方法如下,我稍微增加了过滤器的数量和相当多的迭代次数。这并不是什么大问题,因为训练数据很小,而且仍然很快完成。鉴于每个类别中信号的性质,选择内核大小 2 应该不是问题(一个类别与 1 没有偏差,因此跨 2 个特征的卷积应该可以很好地区分它们)。这是似乎对我有用的代码(注意:我已经平衡了训练数据,尽管它没有太大区别):

from keras.models import Sequential
from keras.layers import Conv1D, Dense, MaxPool1D, Flatten
import numpy as np

n_features = 5

model = Sequential()
model.add(
Conv1D(
filters=10,
kernel_size=2,
input_shape=(n_features, 1)
)
)
model.add(MaxPool1D(pool_size=1))
model.add(Flatten())
model.add(Dense(1, activation='sigmoid'))

model.compile(
loss='mae',
optimizer='adam',
metrics=['accuracy']
)

print(model.summary())

# get some data
X = np.array(
[[1, 2, 3, 4, 5], [1, 1, 1, 1, 1], [1, 1, 1, 1, 1], [1, 2, 3, 4, 5], [1, 2, 3, 4, 5],
[1, 1, 1, 1, 1], [1, 1, 1, 1, 1], [1, 1, 1, 1, 1], [1, 2, 3, 4, 5], [1, 2, 3, 4, 5]],
dtype=np.float32
)
X = np.expand_dims(X, axis=2)

y = np.array([1, 0, 0, 1, 1, 0, 0, 0, 1, 1])

# fit model
model.fit(X, y, epochs=1000)

predictions = model.predict(X)
Y_predict_classes = model.predict_classes(X)

我有兴趣听取其他人的意见,了解可以对该网络进行哪些其他优化和简化。

关于machine-learning - keras CNN 1-D -> 为什么所有预测类返回的结果相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48814777/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com