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

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

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

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

Q&A

0回答

2341閲覧

kerasを用いたAutoencoderの設定の際のプログラムエラーについて

yohehe

総合スコア48

Python

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

0グッド

1クリップ

投稿2018/12/05 16:59

編集2018/12/05 17:10

1次元のCNNとAutoencoderの勉強をしております。エンコーダーとデコーダーの設定の時点でエラーが出てしまいます。
以下試しに作成しているプログラムです。

python

1import numpy as np 2import matplotlib.pyplot as plt 3import pandas as pd 4import seaborn as sns 5import keras 6from keras.models import Sequential,Model 7from keras.layers import GRU,LSTM, Dense, Activation,Dropout,Conv1D,Conv2D,MaxPooling1D,Flatten 8from keras.layers import UpSampling1D 9from keras.layers import Conv2D,MaxPooling2D 10from keras.optimizers import Adagrad 11from keras.layers import LeakyReLU 12from keras import regularizers 13from keras.layers.convolutional_recurrent import ConvLSTM2D 14from keras.layers.convolutional import Conv3D 15%matplotlib inline 16from keras import layers 17from keras.layers import normalization 18 19 20#encoder,decoderのdefを設定する。 21def encoder(input_data): 22 #encoder 23 #input_dataのshapeを定義する。 24 conv1=Conv1D(32,3,activation="relu",padding="same")(input_data) 25 conv1=normalization.BatchNormalization()(conv1) 26 conv1=Conv1D(32,3,activation="relu",padding="same")(conv1) 27 #pooling 28 pooling1=MaxPooling1D(3,padding='same')(conv1) 29 conv2=Conv1D(64,3,activation="relu",padding="same")(pooling1) 30 conv2=normalization.BatchNormalization()(conv2) 31 conv2=Conv1D(64,activation="relu",padding="same")(conv2) 32 return conv2 33 34def decoder(conv2): 35 conv3=Conv1D(64,3,activation="relu",padding="same")(conv2) 36 conv3=BatchNormalization()(conv3) 37 conv3=Conv1D(64,3,activation="relu",padding="same")(conv3) 38 #upsampling 1 39 up1=UpSampling1D(3,padding="same")(conv3) 40 conv4=Conv1D(32,3,activation="relu",padding="same")(up1) 41 conv4=BatchNormalization()(conv4) 42 conv4=Conv1D(32,3,activation="relu",padding="same")(conv4) 43 #upsampling 2 44 up2=UpSampling1D(3,padding="same")(conv4) 45 decoded=Conv1D(1,3,activation="sigmoid",padding="same")(up2) 46 return decoded 47 48#上記でencoderとdecoderを定義しました。 49#あまり以下の方法は望ましいかはわかりませんが、とりあえず動作するために、特徴量と教師データを乱数で設定して、model.sumaryを出すために乱数を設定しています。 50 51# 試しのランダムデータを生成 52#conv1dは(サンプル数、特徴量数、特徴量の次元数)となっているはずなので,reshape 53otameshi_data=np.random.randn(8000).reshape(100,20,4) 54otameshi_data=np.array(otameshi_data) 55print(otameshi_data.shape) 56#とりあえずCNN1Dに合わせて次元数をあわせる 57X=otameshi_data 58 59otameshi_target=np.random.randint(0,10,100) 60print(otameshi_target.shape) 61y=otameshi_target 62 63#train,testデータに分類を行う。 64 65from sklearn.model_selection import train_test_split 66 67(train_X, test_X, train_y, test_y) = train_test_split(X, y,test_size=0.2,shuffle=True) 68 69train_X = np.array(train_X) 70train_y =np.array(train_y) 71test_X=np.array(test_X) 72test_y=np.array(test_y) 73 74from keras.utils import np_utils 75#one-hot表現に変更 76train_y=np_utils.to_categorical(train_y) 77test_y=np_utils.to_categorical(test_y) 78print(train_y.shape) 79print(test_y.shape) 80 81autoencoder=Model(input_data,decoder(encoder(input_data=otameshi_data))) 82autoencoder.compile(loss="mean_squared_error",optimizer="RMSprop") 83autoencoder.summary() 84#model.fitを行う前にsummaryの点でerrorが出てしまいます。 85コード

上記で設定してmodelsummaryを出力してパラメーターを表示しようとすると、以下のエラーが出ます。

ValueError Traceback (most recent call last)
~\Anaconda3\envs\py36\lib\site-packages\keras\engine\base_layer.py in assert_input_compatibility(self, inputs)
278 try:
--> 279 K.is_keras_tensor(x)
280 except ValueError:

~\Anaconda3\envs\py36\lib\site-packages\keras\backend\tensorflow_backend.py in is_keras_tensor(x)
473 raise ValueError('Unexpectedly found an instance of type ' + --> 474 str(type(x)) + '. '
475 'Expected a symbolic tensor instance.')

ValueError: Unexpectedly found an instance of type <class 'numpy.ndarray'>. Expected a symbolic tensor instance.

During handling of the above exception, another exception occurred:

ValueError Traceback (most recent call last)
<ipython-input-98-d8750ea44a19> in <module>
----> 1 autoencoder=Model(input_data,decoder(encoder(input_data=input_data)))
2 autoencoder.compile(loss="mean_squared_error",optimizer="RMSprop")
3 autoencoder.summary()

<ipython-input-86-75e0757ed926> in encoder(input_data)
7 #encoder
8 #input_dataのshapeを定義する。
----> 9 conv1=Conv1D(32,3,activation="relu",padding="same")(input_data)
10 conv1=normalization.BatchNormalization()(conv1)
11 conv1=Conv1D(32,3,activation="relu",padding="same")(conv1)

~\Anaconda3\envs\py36\lib\site-packages\keras\engine\base_layer.py in call(self, inputs, **kwargs)
412 # Raise exceptions in case the input is not compatible
413 # with the input_spec specified in the layer constructor.
--> 414 self.assert_input_compatibility(inputs)
415
416 # Collect input shapes to build layer.

~\Anaconda3\envs\py36\lib\site-packages\keras\engine\base_layer.py in assert_input_compatibility(self, inputs)
283 'Received type: ' +
284 str(type(x)) + '. Full input: ' +
--> 285 str(inputs) + '. All inputs to the layer '
286 'should be tensors.')
287

ValueError: Layer conv1d_7 was called with an input that isn't a symbolic tensor. Received type: <class 'numpy.ndarray'>

上記がエラーの内容です。
畳み込み内のpaddingはすべてsameにしているのですが、パラメータ何度か変更してもエラーですすみません。

どこが間違っているかアドバイスを頂けますと幸いです。

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問