Tôi đã cố gắng triển khai mạng nơron chuyển tiếp.Mạng nơron Keras xuất kết quả tương tự cho mỗi đầu vào
Đây là cấu trúc: Lớp đầu vào: 8 nơron, lớp ẩn: 8 nơron và lớp đầu ra: 8 nơron.
Dữ liệu đầu vào là vectơ 8 bit (1 bit cho mỗi nơron của lớp đầu vào). Các đầu ra của mạng nơron cũng là các vectơ có 8 bit. Vì vậy, trong tổng số liệu có 256 ví dụ.
Ví dụ: nếu cho x = [0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 1.0]
đầu ra phải được y = [1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 1.0]
này là việc thực hiện:
from keras.models import Sequential
from keras.layers import Dense
import numpy as np
import random
from math import ceil
#Dimension of layers
dim = 8
#Generate dataset
X = []
for i in range(0,2**dim):
n = [float(x) for x in bin(i)[2:]]
X.append([0.]*(dim-len(n))+n)
y = X[:]
random.shuffle(y)
X = np.array(X)
y = np.array(y)
# create model
model = Sequential()
model.add(Dense(dim, input_dim=dim, init='normal', activation='sigmoid'))
model.add(Dense(dim, init='normal', activation='sigmoid'))
model.add(Dense(dim, init='normal', activation='sigmoid'))
# Compile model
model.compile(loss='mse', optimizer='SGD', metrics=['accuracy'])
# Fit the model
model.fit(X, y, nb_epoch=1000, batch_size=50, verbose=0)
# evaluate the model
scores = model.evaluate(X, y)
print("%s: %.2f%%" % (model.metrics_names[1], scores[1]*100))
output = model.predict(X)
#Make the output binary
for i in range(0, output[:,0].size):
for j in range(0, output[0].size):
if output[i][j] > 0.5 or output[i][j] == 0.5:
output[i][j] = 1
else:
output[i][j] = 0
print(output)
Đây là những gì tôi nhận được ở đầu ra:
acc: 50.39%
[[ 1. 0. 0. ..., 0. 1. 1.]
[ 1. 0. 0. ..., 0. 1. 1.]
[ 1. 0. 0. ..., 0. 1. 1.]
...,
[ 1. 0. 0. ..., 0. 1. 1.]
[ 1. 0. 0. ..., 0. 1. 1.]
[ 1. 0. 0. ..., 0. 1. 1.]]
dường như al Các đầu ra l có cùng giá trị. Vì vậy, tôi không biết có gì sai về cấu hình. Tôi đã thử điều này Cannot train a neural network in keras - stackoverflow gợi ý loại bỏ hàm kích hoạt ở lớp đầu ra nhưng khi tôi chạy điều này, tôi nhận được tất cả các vectơ đầu ra với giá trị này:
[0. 1. 1. ..., 1. 1. 1. ]
Mọi thông tin chi tiết về cách làm cho nó hoạt động?
Bạn đã thử chạy lại lần này bao nhiêu lần?Có thể sử dụng trình tối ưu hóa khác nhau hoặc thuật toán ngẫu nhiên hóa/ngẫu nhiên hóa có thể hữu ích. Dường như mạng của bạn có thể bị kẹt trong các siêu thị nhỏ địa phương. –
Tôi đã thử chạy lại 15 lần và nhận được kết quả tương tự. Tôi đã thử sử dụng "Adam" và thử sử dụng "relu" kích hoạt và nó imporved một chút, bây giờ tôi nhận được kết quả đầu ra khác nhau nhưng độ chính xác vẫn còn rất thấp (4 trong số 256 đầu ra chính xác). –
Bạn đã cố gắng sử dụng ví dụ: rơi ra ngoài? Hoặc chuẩn hóa hàng loạt? –