logo
Loading...

TypeError: 'NoneType' object is not subscriptable - Cupoy

class Record_tp_tn(Callback): ""&quo...

TypeError: 'NoneType' object is not subscriptable

2020/10/08 下午 09:34
機器學習共學討論版
Shih Cheng Chen
觀看數:166
回答數:3
收藏數:0

``` class Record_tp_tn(Callback): """Code Here 撰寫一個紀錄 ture positive 與 true negative 數量的 callbacks """ def on_train_begin(self, epoch, logs = {}): logs = logs or {} record_items = ["val_auc", "val_f1sc", "val_fp", "val_fn", "val_tp", "val_tn"] for i in record_items: try: if i not in self.params['metrics']: self.params['metrics'].append(i) except: self.params['metrics'] = i def on_epoch_end(self, epoch, logs = {}, thres=0.5): logs = logs or {} y_true = self.validation_data[1].argmax(axis = 1) y_pred = self.model.predict(self.validation_data[0]) y_pred = (y_pred[:, 1] >= thres) * 1 logs["val_tp"] = sum(y_true*y_pred) logs["val_tn"] = sum((y_true==0) & (y_pred==0)) ``` 以上是Day88 homework,要求出TruePositive & TrueNegitive 執行到y_true = self.validation_data[1].argmax(axis = 1) 會出現TypeError: 'NoneType' object is not subscriptable 看不懂這個錯誤,網路上找不到解法。 請求大神幫忙。感謝。

回答列表

  • 2020/10/13 下午 04:11
    柯長榮
    贊同數:1
    不贊同數:0
    留言數:0

    subscriptable 是可具有下標操作的意思,下標操作就是變數 var 可以用 var[i] 去操作,NoneType 是空對象,也就是沒有值的對象,可能是越界了。


    可以自行作幾個實驗,跑出一樣的 error 訊息,這樣會更了解內涵。 

  • 2020/10/15 下午 05:07
    Shih Cheng Chen
    贊同數:0
    不贊同數:0
    留言數:0

    找到原因了,因為self.validation_data未初始化,加入以下可解。

    ```

    def __init__(self, val_data=(x_test, y_test)):

            self.validation_data = val_data

    ```

  • 2020/10/18 上午 01:28
    張維元 (WeiYuan)
    贊同數:0
    不贊同數:0
    留言數:0

    嗨,這邊的問題是「self.validation_data[1]」找不到資料,所以如同你發現的,要從 self.validation_data 下去查證。


    很高興可以在這次問答進行討論,如果還有不懂或是模糊的部分也歡迎持續追問。期待你的互動與鼓勵創造出不同更深度的討論。歡迎加入我自己經營的Line 群組社群,會有不定時舉辦的分享活動,一起來玩玩吧!