我正在使用 Python v2.7(Tensorflow 后端)中的 Keras v2.0.8 创建小型神经网络来计算简单的算术函数(加、减、乘等),并且有点困惑。下面的代码是我的网络,它生成一个带有相应标签的整数随机训练数据集(两个输入加在一起):
def create_data(low, high, examples):
train_data = []
label_data = []
a = np.random.randint(low=low, high=high, size=examples, dtype='int')
b = np.random.randint(low=low, high=high, size=examples, dtype='int')
for i in range(0, examples):
train_data.append([a[i], b[i]])
label_data.append((a[i] + b[i]))
train_data = np.array(train_data)
label_data = np.array(label_data)
return train_data, label_data
X, y = create_data(0, 500, 10000)
model = Sequential()
model.add(Dense(3, input_dim=2))
model.add(Dense(5, activation='relu'))
model.add(Dense(3, activation='relu'))
model.add(Dense(5, activation='relu'))
model.add(Dense(1, activation='relu'))
model.compile(optimizer='adam', loss='mean_squared_error', metrics=['accuracy'])
model.fit(X, y, epochs=10, batch_size=10)
test_data, _ = create_data(0, 500, 10) …Run Code Online (Sandbox Code Playgroud) 我正在尝试在Keras中创建模型,以便根据图片进行数值预测。我的模型具有densitynet121卷积基础,顶部还有几个附加层。除最后两个图层外的所有图层均设置为layer.trainable = False。我的损失是均方误差,因为这是一项回归任务。在训练期间,我得到loss: ~3,而对同一批数据的评估给出loss: ~30:
model.fit(x=dat[0],y=dat[1],batch_size=32)
Run Code Online (Sandbox Code Playgroud)
时代1/1 32/32 [==============================]-0s 11ms / step-损耗:2.5571
model.evaluate(x=dat[0],y=dat[1])
Run Code Online (Sandbox Code Playgroud)
32/32 [==============================]-2s 59ms / step 29.276123046875
在训练和评估期间,我提供了完全相同的32张图片。我还使用的预测值计算了损失y_pred=model.predict(dat[0]),然后使用numpy构造了均方误差。结果与我从评估中得到的结果相同(即29.276123 ...)。
有人建议这种行为可能是由于BatchNormalization卷积基础中的层(有关github的讨论)。当然,BatchNormalization我模型中的所有图层也都已设置layer.trainable=False为。也许有人遇到了这个问题并想出了解决方案?
关于initial_epoch价值fit和fit_generator方法,我有点困惑.这是文档:
initial_epoch:整数.开始训练的时期(对于恢复之前的训练运行很有用).
我明白,如果你从头开始训练,它就没用了.如果您训练了数据集并希望提高准确度或其他值(如果我错了就纠正我),这很有用.但我不确定它到底是做什么的.
毕竟,我有两个问题:
initial_epoch作用和用途是什么?我initial_epoch什么时候可以使用?
我正在用14个新类对MobileNet进行微调。当我通过以下方式添加新图层时:
x=mobile.layers[-6].output
x=Flatten(x)
predictions = Dense(14, activation='softmax')(x)
model = Model(inputs=mobile.input, outputs=predictions)
Run Code Online (Sandbox Code Playgroud)
我得到错误:
'Tensor' object has no attribute 'lower'
Run Code Online (Sandbox Code Playgroud)
还使用:
model.compile(Adam(lr=.0001), loss='categorical_crossentropy', metrics=['accuracy'])
model.fit_generator(train_batches, steps_per_epoch=18,
validation_data=valid_batches, validation_steps=3, epochs=60, verbose=2)
Run Code Online (Sandbox Code Playgroud)
我得到错误:
Error when checking target: expected dense_1 to have 4 dimensions, but got array with shape (10, 14)
Run Code Online (Sandbox Code Playgroud)
什么lower意思 我看到了其他微调脚本,除了模型名称(在这种情况下为X)之外,没有其他参数。
请考虑 TensorFlow 教程中的以下自定义层代码:
class MyDenseLayer(tf.keras.layers.Layer):
def __init__(self, num_outputs):
super(MyDenseLayer, self).__init__()
self.num_outputs = num_outputs
def build(self, input_shape):
self.kernel = self.add_weight("kernel",
shape=[int(input_shape[-1]),
self.num_outputs])
def call(self, input):
return tf.matmul(input, self.kernel)
Run Code Online (Sandbox Code Playgroud)
tf.keras.regularizers.L1如何对自定义层的参数应用任何预定义的正则化(例如)或自定义正则化?
假设您有Keras NN模型,如何在特定层之后的反向传播中停止梯度?
即,如果我们有一个带有两个输出的模型:
input_layer = Input(shape=(10,10,3))
x = Convolution2D(...)(input_layer)
x = Activation('relu')(x)
x = Flatten()(x)
x_1 = Dense(64)(x)
x_1 = Dense(32)(x_1)
x_1 = Dense(2)(x_1)
x_2 = Dense(64)(x)
x_2 = Dense(32)(x_2)
x_2 = Dense(2)(x_2)
model = Model(inputs=input_layer, outputs=[x_1, x_2])
Run Code Online (Sandbox Code Playgroud)
如何x_1在x_1 = Dense(64)(x)层之后停止输出的梯度,以免在卷积层的权重更新中不计入它?
根据在keras的特定层中停止渐变反向道具的答案,我会在x_1致密层之前添加一个lambda 层,但我不确定:
x_1 = Dense(64)(x)
x_1_stop_grad = Lambda(lambda x: K.stop_gradient(x))(x_1)
x_1 = Dense(32)(x_1)
x_1 = Dense(2)(x_1)
Run Code Online (Sandbox Code Playgroud)
我是否必须在第一个致密层之前或之后添加lambda x_1层?
我正在学习NN和Keras。我的测试数据是这样的:
Result, HomeWinPossibility, DrawPossibility, AwayWinPossibility
[['AwayWin' 0.41 0.28 0.31]
['HomeWin' 0.55 0.25 0.2]
['AwayWin' 0.17 0.21 0.62]
.....
Run Code Online (Sandbox Code Playgroud)
这是我的模型:
Result, HomeWinPossibility, DrawPossibility, AwayWinPossibility
[['AwayWin' 0.41 0.28 0.31]
['HomeWin' 0.55 0.25 0.2]
['AwayWin' 0.17 0.21 0.62]
.....
Run Code Online (Sandbox Code Playgroud)
fit的输出为:
Epoch 1/100
190/190 [==============================] - 1s 3ms/step - loss: 0.9151 - acc: 0.5737
Epoch 2/100
190/190 [==============================] - 1s 3ms/step - loss: 0.9181 - acc: 0.5474
Epoch 3/100
190/190 [==============================] - 1s 3ms/step - loss: 0.9111 - acc: 0.5526
Epoch 100/100
190/190 [==============================] …Run Code Online (Sandbox Code Playgroud) 我在 Keras 中使用 Python 并运行ImageDataGenerator和使用flow_from_directory. 我有一些有问题的图像文件,所以我可以使用数据生成器来处理读取错误吗?
我在一小部分图像上收到了一些“无效的 jpg 文件”,并希望在没有我的代码崩溃的情况下处理它。
我想为我的分类特征构建一个带有嵌入的LSTM模型。我目前具有数值特征和一些分类特征,例如位置,pd.get_dummies()由于计算复杂性,因此无法进行一次热编码,这是我本来打算这样做的。
我们来看一个例子:
data = {
'user_id': [1,1,1,1,2,2,3],
'time_on_page': [10,20,30,20,15,10,40],
'location': ['London','New York', 'London', 'New York', 'Hong Kong', 'Tokyo', 'Madrid'],
'page_id': [5,4,2,1,6,8,2]
}
d = pd.DataFrame(data=data)
print(d)
user_id time_on_page location page_id
0 1 10 London 5
1 1 20 New York 4
2 1 30 London 2
3 1 20 New York 1
4 2 15 Hong Kong 6
5 2 10 Tokyo 8
6 3 40 Madrid 2
Run Code Online (Sandbox Code Playgroud)
让我们看看访问网站的人。我正在跟踪诸如页面停留时间等数字数据。分类数据包括:位置(超过1000个唯一性),Page_id(大于1000个唯一性),Author_id(超过100个唯一性)。最简单的解决方案是对所有内容进行一次热编码,然后将其放入具有可变序列长度的LSTM中,每个时间步对应于不同的页面视图。
上面的DataFrame将生成7个训练样本,其序列长度可变。例如,user_id=2我将有2个训练样本:
[ ROW_INDEX_4 ] and [ …Run Code Online (Sandbox Code Playgroud) x是(64, 1)使用 随机创建的维度向量tf.random.uniform((BATCH_SIZE, 1)),其中BATCH_SIZE = 64.
随机初始化如下所示:
tf.Tensor(
[[0.76922464]
[0.7928164 ]
[0.91224647]
[0.41210544]
[0.33040464]
[0.20977008]
[0.96211743]
[0.59516513]
[0.67317 ]
[0.7600033 ]
[0.93105805]
[0.55348516]
[0.50683343]
[0.7563635 ]
[0.06255531]
[0.93398154]
[0.5622641 ]
[0.9913852 ]
[0.3019762 ]
[0.519048 ]
[0.57998526]
[0.21162748]
[0.9783536 ]
[0.38307965]
[0.6527189 ]
[0.8094288 ]
[0.97980523]
[0.5955998 ]
[0.7002481 ]
[0.6879872 ]
[0.50365186]
[0.57166266]
[0.97805905]
[0.458856 ]
[0.3485204 ]
[0.29394794]
[0.19313121]
[0.29782188]
[0.45194447]
[0.49442303]
[0.04192603]
[0.26818407]
[0.822567 ]
[0.8573874 ]
[0.15510845]
[0.76052403]
[0.4066763 …Run Code Online (Sandbox Code Playgroud)