python - 这是 Keras Sequential 模型学习吗?
问题描述
我正在尝试构建一个适合我的数据的 Keras Sequential 模型。但是,我在选择图层和设置输入形状时遇到了麻烦。我的模型精度从 0.4943 开始,并且在不同时期之间没有变化。看来我的模型没有学习。
数据如下所示:
X = [[[0.00000000e+00 0.00000000e+00]
[1.82562794e-01 6.81775296e-01]
[1.13191538e+00 1.37766573e+00]
...
[5.31509230e+01 4.88222520e+01]
[5.38463488e+01 4.92077884e+01]
[5.43891348e+01 4.98190918e+01]]
[[0.00000000e+00 0.00000000e+00]
[4.81657107e-01 4.62969773e-01]
[1.33733394e+00 8.20860280e-01]
...
[5.00154741e+01 4.49145568e+01]
[5.06145436e+01 4.58551323e+01]
[5.14753045e+01 4.66484598e+01]]
[[0.00000000e+00 0.00000000e+00]
[1.24209617e-01 3.41455813e-01]
[6.62306377e-01 9.70226310e-01]
...
[4.59534909e+01 5.14811676e+01]
[4.65830639e+01 5.15458682e+01]
[4.69169909e+01 5.18978055e+01]]
...
[[0.00000000e+00 0.00000000e+00]
[8.37513698e-01 2.36545136e-01]
[2.09606414e+00 2.18579855e+00]
...
[9.33516241e+01 9.02639438e+01]
[9.48198248e+01 9.09696034e+01]
[9.56924057e+01 9.11994364e+01]]
[[0.00000000e+00 0.00000000e+00]
[1.16628793e+00 3.07939104e-01]
[2.90856042e+00 1.93300849e+00]
...
[9.50615310e+01 9.54437621e+01]
[9.64466547e+01 9.62387560e+01]
[9.84132452e+01 9.68517902e+01]]
[[0.00000000e+00 0.00000000e+00]
[7.07518408e-02 1.63762559e+00]
[1.47380576e+00 3.01519861e+00]
...
[9.56341427e+01 8.22719298e+01]
[9.75264435e+01 8.41242858e+01]
[9.85001877e+01 8.44169342e+01]]]
X.shape = (2000, 100, 2)
y = [0. 0. 0. ... 1. 1. 1.]
y.shape = (2000,)
这是模型代码:
model = keras.Sequential([
keras.layers.Flatten(input_shape=(100,2)),
keras.layers.Dense(16, activation=tf.nn.relu),
keras.layers.Dense(16, activation=tf.nn.relu),
keras.layers.Dense(1, activation=tf.nn.sigmoid),
])
model.compile(optimizer='adam',
loss='binary_crossentropy',
metrics=['accuracy'])
h = model.fit(X_train, y_train, epochs=50, batch_size=3, shuffle=True)
test_loss, test_acc = model.evaluate(X_test, y_test)
print('Test accuracy:', test_acc)
我正在尝试进行二进制分类。我的模型有问题吗?任何帮助表示赞赏。
解决方案
我注意到你batch_size=3
这不是一个好的选择。尝试尝试不同的架构/参数。这是一个简单的方法:
model = Sequential()
# model.add(Dense(256, input_dim=2, activation='relu'))
model.add(Dense(256, input_shape=X.shape, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(64, activation='relu')
model.add(Dense(1, activation='sigmoid'))
model.compile(optimizer='adam',
loss='binary_crossentropy',
metrics=['accuracy'])
model.fit(X_train, y_train, epochs=10, batch_size=64, shuffle=True)
工作示例:
from keras import Sequential
from keras.layers import Dense, Dropout
# sample data, 100 samples
X_train = np.random.random((100,2))
y_train = np.random.randint(2, size=(100, 1))
model = Sequential()
model.add(Dense(256, input_dim=2, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(64, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
model.compile(optimizer='adam',
loss='binary_crossentropy',
metrics=['accuracy'])
model.fit(X_train, y_train, epochs=10, batch_size=2)
model.predict(X_train).shape # (100, 1)
推荐阅读
- python - 计算索引中的出现次数
- python - 比较两个dict值并在dict中更新
- php - 如何使用 PHP 实现类似于 c# 事件和委托的东西?
- r - 如何从 R 中的 plot() 函数中删除框和胡须?
- c++ - Visual Studio 是从 C 源代码还是从它编译成的二进制代码生成程序集?
- python - Trying to pass list value from python to html
- kubernetes - User \"system:anonymous\" cannot get path \"/\"
- c++ - 使用 nlohmann JSON C++ 库验证文件中是否存在 JSON 对象
- ruby - 尝试在数组中添加值时“TypeError:nil 不能被强制转换为 Float”
- bash - Makefile:为shell编写条件语句