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

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

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

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

深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

受付中

モデルの学習のさせ方が分かりません

plito_zaemon
plito_zaemon

総合スコア0

Keras

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

深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

0回答

0評価

1クリップ

1048閲覧

投稿2019/07/28 04:10

前提・実現したいこと

ここ[https://github.com/floydhub/pix2code-template/blob/master/pix2code.ipynb]で配布されている画像キャプション生成モデルにAttentionを追加しようと改良をしています。

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

学習させようとすると、model.fitの部分でエラー表示はないものの、jupyter notebookuが止まってしまい学習ができない状態が続いています。 初心者なため、学習時のデータの与え方に問題があるのか、それ以外のモデルの構築の部分に問題があるのか分からなくて困っています。

該当のソースコード

Python

from os import listdir from numpy import array import numpy as np import os from keras.layers import Activation from keras.preprocessing.text import Tokenizer, one_hot from keras.preprocessing.sequence import pad_sequences from keras.models import Model, Sequential, model_from_json from keras.utils import to_categorical from keras.layers.core import Dense, Dropout, Flatten from keras.optimizers import RMSprop from keras.layers.convolutional import Conv2D from keras.callbacks import ModelCheckpoint from keras.layers import Embedding, TimeDistributed, RepeatVector, LSTM, concatenate , Input, Reshape, Dense,MaxPooling2D,dot from keras.preprocessing.image import array_to_img, img_to_array, load_img import tensorflow as tf # Path to Dataset #DS_PATH = 'resources/eval/training_features/' DS_PATH = 'resources/eval/eval1/' DS_EVAL_PATH = 'resources/eval/eval1/' # edit to your /path/to/eval/ds import matplotlib.pyplot as plt # Read a file and return a string def load_doc(filename): file = open(filename, 'r') text = file.read() file.close() return text def load_data(data_dir): text = [] images = [] # Load all the files and order them all_filenames = listdir(data_dir) all_filenames.sort() for filename in (all_filenames): if filename[-3:] == "npz": # Load the images already prepared in arrays image = np.load(data_dir+filename) images.append(image['features']) else: # Load the boostrap tokens and rap them in a start and end tag syntax = '<START> ' + load_doc(data_dir+filename) + ' <END>' # Seperate all the words with a single space syntax = ' '.join(syntax.split()) # Add a space after each comma syntax = syntax.replace(',', ' ,') text.append(syntax) images = np.array(images, dtype=np.float32) return images, text # Get images and text train_features, texts = load_data(DS_PATH) # Initialize the function to create the vocabulary tokenizer = Tokenizer(filters='', split=" ", lower=False) # Create the vocabulary tokenizer.fit_on_texts([load_doc('resources/bootstrap.vocab')]) # Add one spot for the empty word in the vocabulary VOCAB_SIZE = len(tokenizer.word_index) + 1 # Map the input sentences into the vocabulary indexes train_sequences = tokenizer.texts_to_sequences(texts) # The longest set of boostrap tokens max_sequence = max(len(s) for s in train_sequences) # Specify how many tokens to have in each input sentence max_length = 48 def preprocess_data(texts, features, max_sequence): X, y, image_data = list(), list(), list() sequences = tokenizer.texts_to_sequences(texts) for img_no, seq in enumerate(sequences): for i in range(1, len(seq)): # Add the sentence until the current count(i) and add the current count to the output in_seq, out_seq = seq[:i], seq[i] # Pad all the input token sentences to max_sequence in_seq = pad_sequences([in_seq], maxlen=max_sequence)[0] # Turn the output into one-hot encoding out_seq = to_categorical([out_seq], num_classes=VOCAB_SIZE)[0] # Add the corresponding image to the boostrap token file image_data.append(features[img_no]) # Cap the input sentence to MAX_LEN tokens and add it X.append(in_seq[-MAX_LEN:]) y.append(out_seq) return np.array(image_data), np.array(X), np.array(y) # Data generator, intended to be used in a call to model.fit_generator() def data_generator(descriptions, features, n_step, max_sequence): # loop until we finish training while 1: # loop over photo identifiers in the dataset for i in range(0, len(descriptions), n_step): Ximages, XSeq, y = list(), list(),list() for j in range(i, min(len(descriptions), i+n_step)): image = features[j] # retrieve text input desc = descriptions[j] # Generate input-output pairs in_img, in_seq, out_word = preprocess_data([desc], [image], max_sequence) for k in range(len(in_img)): Ximages.append(in_img[k]) XSeq.append(in_seq[k]) y.append(out_word[k]) # yield this batch of samples to the model yield [[array(Ximages), array(XSeq)], array(y)] #Create the Image-encoder visual_input = Input(shape=(256, 256, 3,)) image_model = Conv2D(32, (3, 3), padding='valid', activation='relu')(visual_input) image_model = Conv2D(32, (3, 3), padding='valid', activation='relu')(image_model) image_model = MaxPooling2D(pool_size=(2, 2))(image_model) image_model = Dropout(0.25)(image_model) image_model = Conv2D(64, (3, 3), padding='valid', activation='relu')(image_model) image_model = Conv2D(64, (3, 3), padding='valid', activation='relu')(image_model) image_model = MaxPooling2D(pool_size=(2, 2))(image_model) image_model = Dropout(0.25)(image_model) image_model = Conv2D(128, (3, 3), padding='valid', activation='relu')(image_model) image_model = Conv2D(128, (3, 3), padding='valid', activation='relu')(image_model) image_model = MaxPooling2D(pool_size=(2, 2))(image_model) image_model = Dropout(0.25)(image_model) u = Flatten()(image_model) encoded_image = RepeatVector(MAX_LEN)(u) #Create the Text-encoder language_input = Input(shape=(MAX_LEN,)) language_model = Embedding(VOCAB_SIZE, 50, input_length=MAX_LEN, mask_zero=True)(language_input) language_model = LSTM(128, return_sequences=True)(language_model) language_model = LSTM(128, return_sequences=True)(language_model) #Create the decoder decoder = concatenate([encoded_image, language_model]) decoder = LSTM(512, return_sequences=True)(decoder) decoder, _, _ = LSTM(18,return_sequences=True, return_state=True)(decoder) u_map = Reshape((28*28,128))(u) # 1. スコアの計算 dense_att = Dense(18) score = dot([decoder, dense_att(u_map)], axes=-1) # 2. Attentionの重みの計算 attention = Activation('softmax')(score) # 3. 文脈ベクトルの計算 context = dot([attention, u_map], axes=(2,1)) # 4. 出力ベクトルの計算 attention_dense = Dense(512, activation='tanh') output_dense = Dense(18, activation='softmax') concat = concatenate([context, decoder], axis=2) attentional = attention_dense(concat) y_pred = output_dense(attentional) # Compile the model model = Model(inputs=[visual_input, language_input], outputs=y_pred) #image_model.summary() model.summary() # save model model.save("pix2code_model.h5") filepath="weights.hdf5" checkpoint = ModelCheckpoint(filepath, monitor='val_loss', verbose=1, save_weights_only=True, period=2) callbacks_list = [checkpoint] # Optimizer optimizer = RMSprop(lr=0.0001, clipvalue=1.0) model.compile(loss='categorical_crossentropy', optimizer=optimizer, metrics = ["acc"]) #Train the model history = model.fit_generator(data_generator(texts, train_features, 1, MAX_SEQUENCE),steps_per_epoch=5,epochs=2,callbacks=callbacks_list,verbose=1)

試したこと

参考になる論文や参考書を調べましたが、答えにたどり着けませんでした

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

keras
tensorflow
jupyter notebook

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

Q71
Q71

2019/07/28 13:37

どのようなマシンで、どのようなデータ(大きさ、量)を学習させましたか。また、「止まった」というのを、どのようにして確認しましたか。 学習には、大変時間がかかります。学習しているのではなく、止まっていると判断した根拠は何ですか。
plito_zaemon
plito_zaemon

2019/07/29 05:40

PC:Alienware Aurora R6 メモリ:16GB GPU:NVIDIA GeForce GTX1080 学習させるデータ:.gui形式のプログラムコード(1個あたり1KB)が250個+          .npz形式のファイル(1個あたり18KBぐらい)が250個 で合計3.78MBです 学習が止まっていると判断した根拠:今は自分でプログラムを改良しているので学習データを軽量なものを使っていますが、改良の前は中身が同じ形式のデータ11MBを学習させていました。jupyter notebookで学習の経過を表示するようにしているのですが、途中経過のバーが表示されず、一日放置してもIn [*]から動きません。 説明が下手ですいません...

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Keras

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

深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。