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

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

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

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

深層学習

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

Python 3.x

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

Q&A

0回答

2832閲覧

kerasを用いたalexnetのconcatenate(マルチモーダル学習)

black925

総合スコア12

Keras

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

深層学習

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

Python 3.x

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

0グッド

0クリップ

投稿2019/08/19 07:57

前提・実現したいこと

python3系でkerasを用いてalexnet2つの結合層までの出力をconcatenateしたいのですが,エラーが解決できません
rgbでの224,224,3の画像と,3次元情報を画像化した224,224,3の画像を学習に使用したいと考えています
また今のままでは全層trainbleになっていると思うのですが学習する層の指定もしたいです

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

RuntimeError: Graph disconnected: cannot obtain value for tensor Tensor("conv2d_1_input:0", shape=(?, 224, 224, 3), dtype=float32) at layer "conv2d_1_input". The following previous layers were accessed without issue: []

該当のソースコード

python3
#concatenate_RGB-D.py

import keras
from keras import backend as K, optimizers
from keras.preprocessing.image import ImageDataGenerator
from keras.optimizers import Adam
from keras.losses import categorical_crossentropy
from keras.callbacks import EarlyStopping, ReduceLROnPlateau, ModelCheckpoint
from keras.models import save_model, load_model
from keras.layers import BatchNormalization, Embedding, Concatenate, Maximum, Add
from keras.preprocessing.image import array_to_img, img_to_array, load_img
from keras.utils.np_utils import to_categorical
import os
import numpy as np
from keras.models import Sequential, Model
from keras.layers import Input, Dropout, Flatten, Conv2D, MaxPooling2D, Dense, Activation, BatchNormalization
from keras.applications.vgg16 import VGG16
from keras.optimizers import Adagrad
from keras.optimizers import Adam
from keras.optimizers import SGD
from keras.layers import Activation, Dropout, Conv1D, Conv2D, Reshape, Lambda
import sys
from alex_rgb import alex_rgb
from alex_d import alex_d

ROWS = 224
COLS = 224
CHANNELS = 3
label_list = []
image_list = []

クラスの個数を指定

CLASSES = 3
batch = 32
epoch = 100

rgb_label_list = []
d_label_list = []

rgb_img_list = []
d_img_list = []

train_dir = 'C:/Users/hash/PycharmProjects/keras_deep/RGB-D/test_sukunai/'

path以下の*ディレクトリ以下の画像を読み込む。

for train_path in os.listdir(train_dir):
for dir in os.listdir('{}{}'.format(train_dir, train_path)):
# print('{}{}/{}'.format(train_dir, train_path, dir))
for file in os.listdir('{}{}/{}'.format(train_dir, train_path, dir)):
if str(train_path) == "depth":
d_label_list.append(int(dir) - 1)
img = img_to_array(
load_img('{}{}/{}/{}'.format(train_dir, train_path, dir, file), target_size=(ROWS, COLS, CHANNELS)))
d_img_list.append(img)

elif str(train_path) == "rgb": img = img_to_array( load_img('{}{}/{}/{}'.format(train_dir, train_path, dir, file), target_size=(ROWS, COLS, CHANNELS))) rgb_img_list.append(img)

Y = to_categorical(d_label_list)

input_img_rgb = Input(shape=(ROWS, COLS, CHANNELS), name="input_tensor_rgb")
input_img_d = Input(shape=(ROWS, COLS, CHANNELS), name="input_tensor_d")

cnn1 = alex_rgb()
cnn2 = alex_d()

leave only maximum features to eliminate null inputs

network = Concatenate()([cnn1, cnn2])
network = Dense(4096, activation='relu', name="last_dense")(network)

classification layer

network = Dropout(0.5)(network)
network = Dense(CLASSES, activation='softmax', name='softmax')(network)

model = Model(inputs=[input_img_rgb, input_img_d], outputs=network)

model.compile(optimizer=Adam(lr=1e-4, decay=1e-6),
loss=categorical_crossentropy,
metrics=['accuracy'])

model.summary() # モデルの表示

img_list = [bark_img_list, leaf_img_list, form_img_list]

numpy配列に変更

img_list = [bark_img_list, leaf_img_list, form_img_list]

rgb_img_list = np.array(rgb_img_list)
d_img_list = np.array(d_img_list)

学習を実行。10%はテストに使用。

fit = model.fit(([rgb_img_list, d_img_list]), Y,
batch_size=batch, epochs=epoch, validation_split=0.1)

model.save('./my_model_RGB_D_10.h5')
model.save_weights('./my_model_weights_RGB_D_10.h5')

#ここからalex_rgb.py
import ...

def conv2d(filters, kernel_size, strides=1, bias_init=1, **kwargs):
trunc = TruncatedNormal(mean=0.0, stddev=0.01)
cnst = Constant(value=bias_init)
return Conv2D(
filters,
kernel_size,
strides=strides,
padding='same',
activation='relu',
kernel_initializer=trunc,
bias_initializer=cnst,
**kwargs
)

def dense(units):
trunc = TruncatedNormal(mean=0.0, stddev=0.01)
cnst = Constant(value=1)
return Dense(
units,
activation='tanh',
kernel_initializer=trunc,
bias_initializer=cnst
)

def alex_rgb():
model = Sequential()

# 第1畳み込み層 model.add(conv2d(96, 11, strides=(4, 4), bias_init=0, input_shape=(224, 224, 3))) model.add(MaxPooling2D(pool_size=(3, 3), strides=(2, 2))) model.add(BatchNormalization()) # 第2畳み込み層 model.add(conv2d(256, 5, bias_init=1)) model.add(MaxPooling2D(pool_size=(3, 3), strides=(2, 2))) model.add(BatchNormalization()) # 第3~5畳み込み層 model.add(conv2d(384, 3, bias_init=0)) model.add(conv2d(384, 3, bias_init=1)) model.add(conv2d(256, 3, bias_init=1)) model.add(MaxPooling2D(pool_size=(3, 3), strides=(2, 2))) model.add(BatchNormalization()) # 密結合層 model.add(Flatten()) model.add(dense(4096)) model.add(Dropout(0.5)) model.add(dense(4096)) model.add(Dropout(0.5)) # 読み出し層 nn = model.output return nn

試したこと

alex_rgb.pyの入力にinput_img_rgbの入力があわせられていない気がするのですが書き方がわからずに困っています
alex_rgb.pyとd_alex.pyは処理自体が同じですがあとで書き換えるため違うフォルダに記述しています(今回は2つの処理が全く同じなのでd_alex.pyを省略しています)

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

concatenate_RGB-D.pyでフォルダ内の画像をlistに格納,2つのcnnの指定,cnnの統合,結合層の学習をする予定で
alex_rgb.pyとalex_d.pyでそれぞれのcnnの中身を書く予定です
keras==2.1.3で環境自体は実行に問題は無いと思います(他ソースコードは動いています)

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問