質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

4056閲覧

Segmentation fault: 11

c7744kumamoto-u

総合スコア2

Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2020/10/27 07:57

前提・実現したいこと

以下のコードを実行したところ、途中で処理が止まり、Segmentation fault: 11と表示されました。解決方法が分かる方はご教授お願いします。

発生している問題・エラーメッセージ

Epoch 1/10 Segmentation fault: 11

該当のソースコード

import numpy as np import pandas as pd import os for dirname, _, filenames in os.walk('/kaggle/input'): for filename in filenames: print(os.path.join(dirname, filename)) import glob import matplotlib.pyplot as plt import seaborn as sns from PIL import Image from efficientnet.keras import EfficientNetB7 from sklearn.model_selection import train_test_split from keras.utils import to_categorical from keras.layers import Input, Dense from keras.models import Model from keras.callbacks import ModelCheckpoint DATA_DIR = 's0001/' IM_WIDTH = IM_HEIGHT = 100 TRAIN_TEST_SPLIT = 0.8 TRAIN_VALID_SPLIT = 0.7 ID_EYE_MAP = {0: 'close', 1: 'open'} EYE_ID_MAP = dict((r, i) for i, r in ID_EYE_MAP.items()) def parse_filepath(filepath): try: path, filename = os.path.split(filepath) filename, ext = os.path.splitext(filename) _, _, _, _, eyestatus, _, _, _, = filename.split("_") return ID_EYE_MAP[int(eyestatus)] except Exception as e: print(filepath) return None, None, None files = glob.glob(os.path.join(DATA_DIR, "*.png")) attributes = list(map(parse_filepath, files)) df = pd.DataFrame(attributes) df['file'] = files df.columns = ['eyestatus', 'file'] df = df.dropna() df['eyestatus_id'] = df['eyestatus'].map(lambda eyestatus: EYE_ID_MAP[eyestatus]) #print(df.isnull().sum()) print(df) p = np.random.permutation(len(df)) train_up_to = int(len(df) * TRAIN_TEST_SPLIT) train_idx = p[:train_up_to] test_idx = p[train_up_to:] train_up_to = int(train_up_to * TRAIN_VALID_SPLIT) train_idx, valid_idx = train_idx[:train_up_to], train_idx[train_up_to:] def get_data_generator(df, indices, for_training, batch_size=32): images, eyestatuses = [], [] while True: for i in indices: r = df.iloc[i] file, eyestatus = r['file'], r['eyestatus_id'] im = Image.open(file) im = im.convert("RGB") im = im.resize((IM_WIDTH, IM_HEIGHT)) im = np.array(im) / 255.0 images.append(im) eyestatuses.append(to_categorical(eyestatus, 2)) if len(images) >= batch_size: yield np.array(images), [np.array(eyestatuses)] images, eyestatuses = [], [] if not for_training: break input_layer = Input(shape=(IM_HEIGHT, IM_WIDTH, 3)) efficient_net = EfficientNetB7(weights='noisy-student',include_top=False,input_tensor = input_layer,pooling='max') for layer in efficient_net.layers: layer.trainable = True bottleneck=efficient_net.output x = Dense(units=128, activation='relu')(bottleneck) eyestatus_output = Dense(units=len(EYE_ID_MAP), activation='softmax', name='eyestatus_output')(x) model = Model(inputs=input_layer, outputs=[eyestatus_output]) model.compile(optimizer='rmsprop',loss={'eyestatus_output': 'categorical_crossentropy'},loss_weights={'eyestatus_output': 1.},metrics={'eyestatus_output': 'accuracy'}) #model.summary() batch_size = 10 valid_batch_size = 10 #print(len(valid_idx)//valid_batch_size) #print(len(train_idx)//batch_size) train_gen = get_data_generator(df, train_idx, for_training=True, batch_size=batch_size) valid_gen = get_data_generator(df, valid_idx, for_training=True, batch_size=valid_batch_size) callbacks = [ ModelCheckpoint('./model_checkpoint', monitor='val_loss', verbose=1, save_best_only=True, mode='min') ] history = model.fit_generator(train_gen,steps_per_epoch=len(train_idx)//batch_size,epochs=10,callbacks=callbacks,validation_data=valid_gen,validation_steps=len(valid_idx)//valid_batch_size)

試したこと

メモリ不足によるものかと思ったので、バッチサイズを32→10、画像サイズを198→100に変更してみました。
少しは処理が進みましたが、途中で止まってしまいました。

Jupiter notebookでも実行してみたところ、

The kernel appears to have died. It will restart automatically.

というものが表示され、処理が止まってしまいます。

補足情報(FW/ツールのバージョンなど)

プロセッサ:1.6 GHz デュアルコアIntel Core i5
メモリ:8 GB 2133 MHz LPDDR3

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

BTB

2020/10/27 12:41

Dockerなどの環境で動かしてたりしますか? 他にエラーなどがあれば記載をお願いします。
c7744kumamoto-u

2020/10/27 13:13

Dockerは使っていません。 他にエラー自体はなく、エポック が進んでいる途中に、上記のエラーが生じます。 エラーはありませんが、WARNINGはあります。 2020-10-27 16:41:05.786203: I tensorflow/core/common_runtime/process_util.cc:115] Creating new thread pool with default inter op setting: 4. Tune using inter_op_parallelism_threads for best performance. WARNING:tensorflow:Large dropout rate: 0.5125 (>0.5). In TensorFlow 2.x, dropout() uses dropout rate instead of keep_prob. Please ensure that this is intended. WARNING:tensorflow:Large dropout rate: 0.525 (>0.5). In TensorFlow 2.x, dropout() uses dropout rate instead of keep_prob. Please ensure that this is intended. WARNING:tensorflow:Large dropout rate: 0.5375 (>0.5). In TensorFlow 2.x, dropout() uses dropout rate instead of keep_prob. Please ensure that this is intended. WARNING:tensorflow:Large dropout rate: 0.55 (>0.5). In TensorFlow 2.x, dropout() uses dropout rate instead of keep_prob. Please ensure that this is intended. WARNING:tensorflow:Large dropout rate: 0.5625 (>0.5). In TensorFlow 2.x, dropout() uses dropout rate instead of keep_prob. Please ensure that this is intended. WARNING:tensorflow:From /opt/anaconda3/lib/python3.7/site-packages/keras/backend/tensorflow_backend.py:422: The name tf.global_variables is deprecated. Please use tf.compat.v1.global_variables instead. これは影響しているのでしょうか。
guest

回答2

0

ベストアンサー

他の方も記載しているように、Segmentation faultだけでは特定が難しいですが、今までの経験上jupyterで「The kernel appears to have died. It will restart automatically.」が出るのはだいたいメモリオーバーの時です。もしWindows+Anacondaでjupyternotebookを使用しているようなら、バックで黒いターミナル画面が動いていると思うので、そこにエラーメッセージが表示されていないでしょうか?
あと、さすがにマシンスペックが低すぎるように感じるので、思い切ってバッチサイズを1などに下げてみて、うまくいくか試してみてはどうでしょうか?
私は普段RTX2080Tiでやっていますが、それでもバッチサイズは8~16くらいでやっていることが多いです。

投稿2020/10/27 13:55

Ryomax

総合スコア68

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

segmentation faultだけだと原因が特定が難しいようなので、
一度jupyterでなく、.pyなどのpythonファイルに直して実行してみてはいかがでしょうか。

参考URL
https://qiita.com/fluxCapacitor/items/6efbeb7e0094ba4207a8

投稿2020/10/27 13:35

BTB

総合スコア136

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

c7744kumamoto-u

2020/10/27 13:58

すみません。上記のエラーは.pyファイルでターミナルで実行した結果なのです、、、 現状だとこのエラーを解消することは難しいでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問