Tensorflow(1.12)でNNの層を作っています。
python
1def _conv1d_block(inputs, filters, keep_prob=0.25, name='conv'): 2 with tf.variable_scope(name): 3 conv = tf.contrib.layers.conv1d(inputs, filters, kernel_size=2, stride=1, padding='same') 4 #conv = tf.contrib.layers.batch_norm(conv, updates_collections=None, decay=0.99, scale=True, center=True) 5 conv = tf.layers.max_pooling1d(conv, pool_size=2, strides=2, padding='same') 6 conv = tf.nn.dropout(conv, keep_prob=keep_prob) 7 return conv 8 9 10def conv1d(x, z_dim, reuse=False): 11 with tf.variable_scope('conv1d', reuse=reuse): 12 net = _conv1d_block(x, filters=66, keep_prob=0.25, name='conv_1') 13 net = _conv1d_block(net, filters=132, keep_prob=0.3, name='conv_2') 14 #net = conv_block(net, filters=264, keep_prob=0.5, name='conv_3') 15 net = tf.contrib.layers.flatten(net) 16 net = tf.layers.dense(net, 64) 17 net = tf.nn.relu(net) 18 #net = tf.nn.dropout(net, keep_prob=0.4) 19 net = tf.layers.dense(net, z_dim) 20 #net = tf.nn.relu(net) 21 22 return net 23 24 25def _conv2d_block(inputs, out_channels, keep_prob=0.5, name='conv'): 26 with tf.variable_scope(name): 27 conv = tf.layers.conv2d(inputs, out_channels, kernel_size=2, padding='SAME') 28 #conv = tf.contrib.layers.batch_norm(conv, updates_collections=None, decay=0.99, scale=True, center=True) 29 conv = tf.nn.relu(conv) 30 conv = tf.contrib.layers.max_pool2d(conv, 2) 31 conv = tf.nn.dropout(conv, keep_prob=keep_prob) 32 return conv 33 34 35def conv2d(x, z_dim, reuse=False): 36 with tf.variable_scope('conv2d', reuse=reuse): 37 net = _conv2d_block(x, 32, keep_prob=0.25, name='conv_1') 38 net = _conv2d_block(net, 64, keep_prob=0.3, name='conv_2') 39 net = _conv2d_block(net, 128, keep_prob=0.5, name='conv_3') 40 #net = _conv2d_block(net, z_dim, name='conv_4') 41 net = tf.contrib.layers.flatten(net) 42 net = tf.layers.dense(net, 64) 43 net = tf.nn.relu(net) 44 #net = tf.nn.dropout(net, keep_prob=0.4) 45 net = tf.layers.dense(net, z_dim) 46 #net = tf.nn.relu(net) 47 return net
このように、conv1dとconv2dでほとんど作りは同じなのに、conv2dのみエラーが出てしまいます。
エラーは以下のように、次元がNoneになっているということです。conv1dでは同じことができているのにconv2dではできないのは、なぜでしょうか?
File "/fewshot/models/nnlib.py", line 51, in conv2d net = tf.layers.dense(net, 64) File "/anaconda3/envs/tf1_12/lib/python3.6/site-packages/tensorflow/python/layers/core.py", line 184, in dense return layer.apply(inputs) File "/anaconda3/envs/tf1_12/lib/python3.6/site-packages/tensorflow/python/keras/engine/base_layer.py", line 817, in apply return self.__call__(inputs, *args, **kwargs) File "/anaconda3/envs/tf1_12/lib/python3.6/site-packages/tensorflow/python/layers/base.py", line 374, in __call__ outputs = super(Layer, self).__call__(inputs, *args, **kwargs) File "/anaconda3/envs/tf1_12/lib/python3.6/site-packages/tensorflow/python/keras/engine/base_layer.py", line 746, in __call__ self.build(input_shapes) File "/anaconda3/envs/tf1_12/lib/python3.6/site-packages/tensorflow/python/keras/layers/core.py", line 933, in build raise ValueError('The last dimension of the inputs to `Dense` ' ValueError: The last dimension of the inputs to `Dense` should be defined. Found `None`.
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。