【发布时间】:2020-04-13 05:33:36
【问题描述】:
作业是通过 BP 神经网络识别手写数字。我试过添加隐藏层,增加单位和改变激活,动量,但结果显示:
测试累计:0.11142061281337047
分割数据集 X:(1797,64) Y(1797,)
np.random.shuffle(X)
np.random.shuffle(y)
offset1=int(len(X)*0.6)
offset2=int(len(X)*0.8)
offset3=len(X)-1
X_train, y_train = X[0:offset1,:], y[0:offset1]
X_valid, y_valid = X[offset1:offset2,:], y[offset1:offset2]
X_test, y_test = X[offset2:offset3,:], y[offset2:offset3]
还有我的神经网络:
def create_network():
# TODO
net = tf.keras.Sequential()
net.add(tf.keras.layers.Flatten())
net.add(tf.keras.layers.Dense(64, activation='relu'))
net.add(tf.keras.layers.Dense(64, activation='relu'))
net.add(tf.keras.layers.Dense(10, activation='softmax'))
net.compile(
optimizer='adam',
#tf.optimizers.SGD(learning_rate=0.01, momentum=0.0, nesterov=False),
loss="sparse_categorical_crossentropy",
metrics=["accuracy"])
return net
def train_network(network,
X_train,
y_train,
X_valid,
y_valid,
n_epoch=32,
batch_size=64):
n_iter = 0
network.fit(x=X_train, y=y_train, epochs=n_epoch, validation_data=(X_valid,y_valid))
#opt = tf.optimizers.SGD(learning_rate=0.01, momentum=0.0, nesterov=False) #SGD=Stochastic Gradient Descent
net = create_network()
train_network(net, X_train, y_train, X_valid, y_valid)
# evaluate on test set:
y_test_pred = net(X_test)
y_test_pred = np.argmax(y_test_pred.numpy(), axis=1)
print("Test Acc:", accuracy_score(y_true=y_test, y_pred=y_test_pred))
【问题讨论】:
-
您的代码中没有任何地方实际训练网络,为什么不使用 network.fit?
-
@MatiasValdenegro 我已续订,请查收,再次感谢
标签: python-3.x numpy tensorflow keras neural-network