>source

자동 인코더를 구현하는 keras 코드가 있습니다 :

ENCODING_DIM = 5
# input placeholder
input_img = tf.keras.layers.Input(shape=(320,))
# this is the encoded representation of the input
encoded = tf.keras.layers.Dense(35, activation='relu')(input_img)
encoded = tf.keras.layers.Dense(20, activation='relu')(encoded)
encoded = tf.keras.layers.Dense(ENCODING_DIM, activation='relu')(encoded)
decoded = tf.keras.layers.Dense(20, activation='relu')(encoded)
decoded = tf.keras.layers.Dense(35, activation='relu')(decoded)
decoded = tf.keras.layers.Dense(320, activation='sigmoid')(decoded)
autoencoder = tf.keras.models.Model(input_img, decoded)
encoder = tf.keras.models.Model(input_img, encoded)
encoded_input = tf.keras.layers.Input(shape=(ENCODING_DIM,))
decoder_layer = autoencoder.layers[-1]
#decoded_input = tf.keras.models.Model(encoded_input,decoder_layer(encoded_input))
autoencoder.compile(optimizer='nadam', loss='binary_crossentropy')
from keras.callbacks import ModelCheckpoint

완벽하게 작동합니다.

이제 다양한 입력 크기를 원합니다 (예 : 첫 번째 벡터 [320x1], 두 번째 [280x1] 등)

이제 그렇게하려고 노력합니다 :

ENCODING_DIM = 5
# input placeholder
input_img = tf.keras.layers.Input(shape=(None,))
# this is the encoded representation of the input
encoded = tf.keras.layers.Dense(35, activation='relu')(input_img)
encoded = tf.keras.layers.Dense(20, activation='relu')(encoded)
encoded = tf.keras.layers.Dense(ENCODING_DIM, activation='relu')(encoded)
decoded = tf.keras.layers.Dense(20, activation='relu')(encoded)
decoded = tf.keras.layers.Dense(35, activation='relu')(decoded)
decoded = tf.keras.layers.Dense(320, activation='sigmoid')(decoded)
autoencoder = tf.keras.models.Model(input_img, decoded)
encoder = tf.keras.models.Model(input_img, encoded)
encoded_input = tf.keras.layers.Input(shape=(ENCODING_DIM,))
decoder_layer = autoencoder.layers[-1]
#decoded_input = tf.keras.models.Model(encoded_input,decoder_layer(encoded_input))
autoencoder.compile(optimizer='nadam', loss='binary_crossentropy')
from keras.callbacks import ModelCheckpoint

그러나 다음과 같은 오류를 반환합니다 :

ValueError                                Traceback (most recent call last)
<ipython-input-24-7764c4707491> in <module>()
     14 
     15 # this is the encoded representation of the input
---> 16 encoded = tf.keras.layers.Dense(35, activation='relu')(input_img)
     17 encoded = tf.keras.layers.Dense(20, activation='relu')(encoded)
     18 encoded = tf.keras.layers.Dense(ENCODING_DIM, activation='relu')(encoded)
2 frames
/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/layers/core.py in build(self, input_shape)
    935     input_shape = tensor_shape.TensorShape(input_shape)
    936     if tensor_shape.dimension_value(input_shape[-1]) is None:
--> 937       raise ValueError('The last dimension of the inputs to `Dense` '
    938                        'should be defined. Found `None`.')
    939     last_dim = tensor_shape.dimension_value(input_shape[-1])
ValueError: The last dimension of the inputs to `Dense` should be defined. Found `None`.

입력 치수가 다른 자동 인코더를 어떻게 구현할 수 있습니까?


  • 답변 # 1

    고밀도 레이어는 각 경우에 각 입력 기능에 연결되는 35 개의 뉴런을 생성합니다 (320 개 중). 예를 들어 35x320 크기의 가중치 행렬을 초기화합니다. 입력 크기를 알 수 없을 때, 적어도 밀도가 높은 레이어에 대해서는 이러한 매트릭스를 초기화 할 방법이 없습니다. 모델을 정의 할 때 입력을 가능한 최대 입력 길이 (320?)로 채워야합니다.

  • 이전 c# - DAC 필드를 업데이트하는 올바른 방법을 결정하는 방법은 무엇입니까?
  • 다음 java - PdfStamper가 cleanup () 후에 pdf에서 이미지를 제거하게 만드는 이유는 무엇입니까?