所以,我正在创建一个人工智能,它可以预测用户完成练习需要多长时间。我之前用Sklearn创建了一个NN,但我想集成Tensorflow。
我有6个特征作为输入,1个输出,这是一个数字。
我试过了,但它似乎不愿意工作:
# Train data
X_train = X[:1500]
y_train = y[:1500]
# Test data
X_test = X[1500:]
y_test = y[1500:]
# Create the TF model
model = tf.keras.Sequential([
tf.keras.layers.Flatten(input_shape=(6,)),
tf.keras.layers.Dense(256, activation='softmax'),
tf.keras.layers.Dense(128, activation='softmax'),
tf.keras.layers.Dense(64, activation='softmax'),
tf.keras.layers.Dense(1)
])
model.compile(optimizer='adam',
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
metrics=['accuracy'])
model.fit(X_train, y_train, epochs=10)
这样,它就可以使用一个简单的MLPClassifier。
我也设法得到了这个不错的错误,似乎不能通过改变图层来修复:
收到标签值1209638408,超出[0,1)的有效范围。
所以我稍微改变了一下,变成了这样:
features_train = features[:1500]
output_train = output[:1500]
features_test = features[1500:]
output_test = output[1500:]
classifier = Sequential()
classifier.add(Dense(units = 16, activation = 'relu', input_dim = 6))
classifier.add(Dense(units = 128, activation = 'relu'))
classifier.add(Dense(units = 64, activation = 'relu'))
classifier.add(Dense(units = 32, activation = 'relu'))
classifier.add(Dense(units = 8, activation = 'relu'))
classifier.add(Dense(units = 2, activation = 'relu'))
classifier.add(Dense(units = 1))
classifier.compile(optimizer='rmsprop', loss='binary_crossentropy')
classifier.fit(features_train, output_train, batch_size = 1, epochs = 10)
但现在我损失了100%。
您应该使用较小的网络。尝试使用更少的密集层,最多2或3个。如果使用binary_crossentropy
损耗,则在最后一个Dense层中使用s形激活。您还可以在编译模型时传递metrics=['accuracy']来监视精度。