簡體   English   中英

keras中的本地連接一維自動編碼器

[英]locallyconnected1D autoencoder in keras

我試圖通過重新使用本教程中的“最簡單的” Dense自動編碼器來在Keras中創建LocallyConnected1D自動編碼器。

我不斷收到錯誤消息,我認為這是由於input_shape的尺寸引起的。

Traceback (most recent call last):
File "localdendritic.py", line 38, in <module>
kernel_size=6)
File "localdendritic.py", line 15, in __init__
activation='relu')(input_placeholder)
File "/Users/me/anaconda3/lib/python3.6/site-packages/keras/engine/topology.py", line 573, in __call__
self.assert_input_compatibility(inputs)
File "/Users/me/anaconda3/lib/python3.6/site-packages/keras/engine/topology.py", line 472, in assert_input_compatibility
str(K.ndim(x)))
ValueError: Input 0 is incompatible with layer encoded_layer: expected ndim=3, found ndim=2

我的代碼如下。 我試過將input_shape數組更改為[None, 1, input_size][1, 1, input_size][1, input_size][None, input_size] ,但是它似乎沒有任何改變。 我想我缺少關於輸入形狀的一些見解。

import numpy as np
from keras.models import Model, Sequential
from keras.layers import Input, LocallyConnected1D


class Localautoencoder:

  def __init__(self, input_size, encoded_size, kernel_size, **kwargs):

    input_shape = np.array([input_size])
    input_placeholder = Input(shape=(input_size, 1))
    encoded = LocallyConnected1D(encoded_size, kernel_size,
                                 input_shape=input_shape,
                                 name='encoded_layer',
                                 activation='relu')(input_placeholder)
    decoded = LocallyConnected1D(input_size, kernel_size,
                                activation='sigmoid',
                                name='decoded_layer')(encoded)
    self.localae = Model(input_placeholder, decoded)
    self.encoder = Model(input_placeholder, encoded)
    encoded_input = Input(shape=(1, encoded_size))
    decoded_layer = self.localae.layers[-1]
    self.decoder = Model(encoded_input, decoded_layer(encoded_input))
    self.localae.compile(optimizer='adam', loss='binary_crossentropy')


from keras.datasets import mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train = x_train.astype('float32')/255.
x_test = x_test.astype('float32')/255.
x_train = x_train.reshape((len(x_train), np.prod(x_train.shape[1:])))
x_test = x_test.reshape((len(x_test), np.prod(x_test.shape[1:])))
print(x_train.shape)
print(x_test.shape)

lae = Localautoencoder(input_size=x_train.shape[1],
                   encoded_size=100,
                   kernel_size=6)

LocallyConnected1D層接受三維輸入,但是input_placeholder僅是二維。 解決此問題的方法是添加一個Reshape圖層,將您的2D輸入轉換為3D輸入。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM