Элементы
inline-block
не могут достичь этого макета - как продемонстрировано @Oriol, но
body {
margin: 0;
}
ul {
display: inline-grid;
grid-template-columns: repeat(auto-fit, 100px);
min-width: 50vw;
/* decorative properties */
grid-gap: 10px;
padding: 0;
list-style: none;
border: 5px solid salmon;
box-sizing: border-box;
/* center the grid */
position: relative;
left: 50vw;
transform: translateX(-50%);
}
li {
background-color: lightblue;
height: 100px;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
В основном соответствующий код сводится к следующему:
ul {
display: inline-grid; /* (1) */
grid-template-columns: repeat(auto-fit, 100px); /* 100px = column width - (2) */
min-width: 50vw; /* or any user-defined min-width (3) */
}
1) Сделайте контейнерный контейнер контейнером в виде сетки. Это заставит сетку «обрезать» содержимое, чтобы ширина сетки никогда не была более широкой, чем ее содержимое.
2) Установите сетку с адаптивной компоновкой (значение auto-fill
/ auto-fit
используется для гибких макетов). Если нет места в строке для соответствия следующему элементу - он переносится в следующую строку.
Когда адаптивный макет используется вместе с встроенной сеткой - ширина сетки будет равна ширине одной элемент сетки. (когда ширина ширины / min-ширина явно не установлена - , как это )
3) Установите контейнер с минимальной шириной, которая представляет (не более - один частичный элемент меньше, чем ) желаемая максимальная ширина для контейнера.
Итак, если заданная минимальная ширина точно вписывается в определенное количество элементов, это означает, что это также будет максимальная ширина сетки, потому что следующий элемент будет заворачивать.
Если, однако, минимальная ширина точно не соответствует ширине элементов 'n' тем, что она также входит в часть n + 1-го элемента - в этом случае сетка будет слегка расширяться до точности установите n + 1-й элемент - с переносом n + 2-го элемента в следующую строку.
Проблема в том, что вы сравниваете тензор с формой [None, 5]
(ранг 2) со скейлером (ранг 0), что невозможно при tf.greater
или tf.less
[116 ]. Вместо этого вы можете использовать tf.math...
, которые поддерживают вещание.
Вот одно из возможных решений для реализации этой функции:
import tensorflow as tf
x = tf.placeholder(dtype=tf.float32, shape=[1, 5])
cond1 = tf.cast(tf.math.greater(x, 2.0), tf.float32)
cond2 = tf.cast(tf.math.logical_and(tf.math.less_equal(x, 2.0), tf.math.greater_equal(x, 0.0)), tf.float32)
cond3 = tf.cast(tf.math.logical_and(tf.math.less(x, 0.0), tf.math.greater_equal(x, -2.0)), tf.float32)
cond4 = tf.cast(tf.math.less(x, -2.0), tf.float32)
a = tf.math.multiply(cond1, 1.0)
b = tf.math.multiply(cond2, (x - tf.square(x) / 4))
c = tf.math.multiply(cond3, (x + tf.square(x) / 4))
d = tf.math.multiply(cond4, -1.0)
f = a + b + c + d
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
print(sess.run(f, feed_dict={x: [[-1.0, -5, 1.5, -1.5, 5]]}))
Вы можете попробовать слой lambda
, который очень удобен для добавления нашего пользовательского слоя или функции в сеть. Вот пример:
dense1 = Dense(dims)(input)
act1 = Lambda(customFunc, output_shape)(dense1)
def customFunc(x):
"""-----operations----""""
# final output y of shape defined as above in layer
y = conditioned-output
return y
Вот ссылка для дополнительной информации info Это еще одна полезная ссылка , поясненная на примере.