2017-01-24 38 views
5

Tôi đào tạo một vấn đề hồi quy mạng thần kinh trong Keras. Tại sao đầu ra chỉ là một Kích thước, độ chính xác trong mỗi Epoch luôn hiển thị acc: 0.0000e + 00?Độ chính xác không đào tạo mạng nơron trong Keras

như sau:

1000/199873 [..............................] - ETA: 5s - mất mát: 0,0057 - acc: 0,0000e + 00

2000/199873 [..............................] - ETA: 4s - mất: 0,0058 - acc: 0,0000e + 00

3000/199873 [........................... ...] - ETA: 3s - mất: 0,0057 - acc: 0,0000e + 00

4000/199873 [....................... .......] - ETA: 3s - mất: 0,0060 - acc: 0,0000e + 00 ...

198000/199873 [============================>.] - ETA: 0s - loss : 0,0055 - acc: 0,0000e + 00

199000/199873 [============================>.] - ETA : 0 - mất: 0,0055 - acc: 0,000000 + 00

199873/199873 [============================= =] - 4s - mất: 0,0055 - acc: 0.0000e + 00 - val_loss: 0,0180 - val_acc: 0.0000e + 00

Epoch 50/50

Nhưng nếu đầu ra là hai Dimension hoặc cao hơn, không có vấn đề gì về tính chính xác.

Mô hình của tôi như sau: `

input_dim = 14 
batch_size = 1000 
nb_epoch = 50 
lrelu = LeakyReLU(alpha = 0.1) 

model = Sequential() 
model.add(Dense(126, input_dim=input_dim)) #Dense(output_dim(also hidden wight), input_dim = input_dim) 
model.add(lrelu) #Activation 

model.add(Dense(252)) 
model.add(lrelu) 
model.add(Dense(1)) 
model.add(Activation('linear')) 

model.compile(loss= 'mean_squared_error', optimizer='Adam', metrics=['accuracy']) 
model.summary() 
history = model.fit(X_train_1, y_train_1[:,0:1], 
        batch_size=batch_size, 
        nb_epoch=nb_epoch, 
        verbose=1, 
        validation_split=0.2) 

loss = history.history.get('loss') 
acc = history.history.get('acc') 
val_loss = history.history.get('val_loss') 
val_acc = history.history.get('val_acc') 

'''saving model''' 
from keras.models import load_model 
model.save('XXXXX') 
del model 

'''loading model''' 
model = load_model('XXXXX') 

'''prediction''' 
pred = model.predict(X_train_1, batch_size, verbose=1) 
ans = [np.argmax(r) for r in y_train_1[:,0:1]] 

Trả lời

5

Vấn đề là mô hình đầu ra cuối cùng của bạn có kích hoạt tuyến tính, làm cho mô hình hồi quy, không phải là một vấn đề phân loại. "Độ chính xác" được định nghĩa khi mô hình phân loại dữ liệu chính xác theo lớp, nhưng "độ chính xác" không được xác định một cách hiệu quả cho một vấn đề hồi quy, do thuộc tính liên tục của nó.

Xóa chính xác dưới dạng chỉ số và chuyển sang hồi quy hoàn toàn hoặc làm cho sự cố của bạn thành vấn đề phân loại, sử dụng loss='categorical_crossentropy'activation='softmax'.

Đây là một vấn đề tương tự như của bạn: Link

Để biết thêm thông tin xem: StackExchange

0

Tôi không chắc chắn vấn đề của bạn là gì, nhưng mô hình của bạn trông hơi lạ với tôi.

Đây là mô hình của bạn:

lrelu = LeakyReLU(alpha = 0.1) 
model = Sequential() 
model.add(Dense(126, input_dim=15)) #Dense(output_dim(also hidden wight), input_dim = input_dim) 
model.add(lrelu) #Activation 

model.add(Dense(252)) 
model.add(lrelu) 
model.add(Dense(1)) 
model.add(Activation('linear')) 

và trực quan của mô hình của bạn được hiển thị như dưới đây:

enter image description here

Có hai lớp có thể là lớp đầu ra của mô hình của bạn, và bạn đã không quyết định cái nào là lớp đầu ra thực tế của bạn. Tôi đoán đó là lý do bạn không thể đưa ra dự đoán đúng.

Nếu bạn muốn thực hiện mô hình của bạn như thế này,

enter image description here

bạn nên thêm lớp kích hoạt tài khoản một cách độc lập, chứ không phải sử dụng cùng một.

Ví dụ,

model = Sequential() 
model.add(Dense(126, input_dim=15)) #Dense(output_dim(also hidden wight), input_dim = input_dim) 
model.add(LeakyReLU(alpha = 0.1)) #Activation 

model.add(Dense(252)) 
model.add(LeakyReLU(alpha = 0.1)) 
model.add(Dense(1)) 
model.add(Activation('linear')) 
+0

Cảm ơn bạn đã trả lời của bạn, nhưng nó vẫn hiển thị các acc: 0.0000e + 00. – soartseng

Các vấn đề liên quan