我正在玩一个ANN,这是Udacity DeepLearning课程的一部分.
我有一个任务,涉及使用L2丢失将一个隐藏的ReLU层引入网络.我想知道如何正确地引入它,以便所有权重都受到惩罚,而不仅仅是输出层的权重.
没有概括的网络代码位于帖子的底部(实际运行培训的代码超出了问题的范围).
引入L2的明显方法是用这样的方法替换损失计算(如果beta为0.01):
loss = tf.reduce_mean( tf.nn.softmax_cross_entropy_with_logits(out_layer, tf_train_labels) + 0.01*tf.nn.l2_loss(out_weights))
Run Code Online (Sandbox Code Playgroud)
但在这种情况下,它会考虑输出层权重的值.我不确定,我们如何正确地惩罚进入隐藏的ReLU层的权重.是否需要它或引入输出层的惩罚将以某种方式保持隐藏的权重也检查?
#some importing
from __future__ import print_function
import numpy as np
import tensorflow as tf
from six.moves import cPickle as pickle
from six.moves import range
#loading data
pickle_file = '/home/maxkhk/Documents/Udacity/DeepLearningCourse/SourceCode/tensorflow/examples/udacity/notMNIST.pickle'
with open(pickle_file, 'rb') as f:
save = pickle.load(f)
train_dataset = save['train_dataset']
train_labels = save['train_labels']
valid_dataset = save['valid_dataset']
valid_labels = save['valid_labels']
test_dataset = save['test_dataset']
test_labels = save['test_labels']
del save # hint to help gc free up memory
print('Training …Run Code Online (Sandbox Code Playgroud) machine-learning neural-network regularized deep-learning tensorflow
我目前正在玩ANN,这是Udactity DeepLearning课程的一部分.
我成功建立并培训了网络,并在所有权重和偏差上引入了L2正则化.现在我正在尝试隐藏图层的丢失,以便改进泛化.我想知道,将L2正则化引入隐藏层并在同一层上丢失是否有意义?如果是这样,如何正确地做到这一点?
在辍学期间,我们实际上关闭了隐藏层的一半激活并使其余神经元输出的量加倍.在使用L2时,我们计算所有隐藏权重的L2范数.但我不知道如何使用dropout来计算L2.我们关闭了一些激活,我们不应该从L2计算中删除现在"未使用"的权重吗?关于这个问题的任何参考都会有用,我还没有找到任何信息.
如果您有兴趣,我的具有L2正规化的ANN代码如下:
#for NeuralNetwork model code is below
#We will use SGD for training to save our time. Code is from Assignment 2
#beta is the new parameter - controls level of regularization. Default is 0.01
#but feel free to play with it
#notice, we introduce L2 for both biases and weights of all layers
beta = 0.01
#building tensorflow graph
graph = tf.Graph()
with graph.as_default():
# Input data. For the training data, we use a placeholder …Run Code Online (Sandbox Code Playgroud) machine-learning neural-network regularized deep-learning tensorflow
我正在尝试解决回归任务.我发现有3个模型可以很好地处理不同的数据子集:LassoLARS,SVR和Gradient Tree Boosting.我注意到,当我使用所有这3个模型进行预测然后制作一个"真实输出"表和我的3个模型的输出时,我看到每次至少有一个模型真的接近真实输出,但是其他2个模型可能相对较远.
当我计算最小可能的错误时(如果我从每个测试示例的'最佳'预测器中获取预测),我得到的错误远小于任何模型的错误.所以我想到尝试将这3种不同模型的预测结合到某种集合中.问题是,如何正确地做到这一点?我的所有3个模型都是使用scikit-learn构建和调整的,它是否提供某种方法可用于将模型打包到整体中?这里的问题是我不想仅仅平均来自所有三个模型的预测,我想用加权来做这个,其中加权应该基于特定示例的属性来确定.
即使scikit-learn没有提供这样的功能,如果有人知道如何通过属性来解决这个任务,那就更好了 - 找出数据中每个例子的每个模型的权重.我认为它可以通过在所有这3个模型之上构建的单独的回归器来完成,它将尝试为3个模型中的每个模型输出最佳权重,但我不确定这是否是这样做的最佳方式.
我正在使用来自scikit-learn库的LinearSVC,我想知道是否有可能以某种方式拉出我的模型在训练后使用的向量来进行预测.试图谷歌它一段时间,但没有任何运气.有谁知道?
我正在玩tensorflow很长一段时间,我有更多的理论问题.通常,当我们训练网络时,我们通常使用GradientDescentOptimizer(可能是adagrad或adam的变体)来最小化损失函数.一般来说,我们似乎正在尝试调整权重和偏差,以便我们获得此损失函数的全局最小值.但问题是我假设这个函数有一个非常复杂的外观,如果你绘制它,有很多局部优化.我想知道的是,我们怎样才能确定Gradient Descent找到全局最优并且我们没有立即陷入某些局部最优而不是全局最优?
我记得,例如当你在sklearn中执行聚类时,它通常会随着群集中心的随机初始化多次运行聚类算法,并且通过这样做,我们确保我们不会陷入不优化的结果.但是我们在张量流中训练人工神经网络时并没有做这样的事情 - 我们从一些随机权重开始,然后沿着函数的斜率行进.
那么,对此有何见解?为什么我们可以或多或少地确定一旦损失停止显着减少,通过梯度下降的训练结果接近全局最小值?
只是为了澄清,为什么我想知道这个问题是,如果我们不能确定我们至少接近全球最小值,我们就不能轻易判断出哪两个不同的模型实际上更好.因为我们可以进行实验,得到一些模型评估,表明模型不好......但实际上它只是在训练开始后不久就陷入了局部最低限度.虽然对我们来说似乎更好的其他模型更幸运的是从更好的起点开始训练并且没有陷入局部最低速度.此外,这个问题意味着我们甚至不能确定我们从目前可以测试的网络架构中获得最大化.例如,它可能具有非常好的全局最小值,但很难找到它,而且我们大多陷入局部最小值的不良解决方案,这将远离全局最优并且永远不会看到手头的网络的全部潜力.
我试图从数据框中仅选择因子列。示例如下:
bank[,apply(bank[,names(bank)!="id"], is.factor)]
Run Code Online (Sandbox Code Playgroud)
但代码的行为很奇怪。一步步:
sapply(bank[,names(bank)!="id"], is.factor)
Run Code Online (Sandbox Code Playgroud)
我得到:
age sex region income married children car
FALSE TRUE TRUE FALSE TRUE FALSE TRUE
save_act current_act mortgage pep ageBin
TRUE TRUE TRUE TRUE TRUE
Run Code Online (Sandbox Code Playgroud)
看起来不错。现在,我假设我只是将这个 TRUE/FALSE 矩阵传递到下一步并仅获取我需要的列:
bank[,sapply(bank[,names(bank)!="id"], is.factor)]
Run Code Online (Sandbox Code Playgroud)
但结果我得到了与原始银行数据框中相同的列。什么都没有被过滤掉。我以一种或另一种方式尝试过,但找不到解决方案。对我做错了什么有什么建议吗?
我刚刚开始使用 selenium,但在阅读文档后,我无法理解如何正确执行等待(使用 EC),直到 webdriver 识别出作为另一个元素的子元素的元素的存在。
让我解释。我想要一个可以通过两步访问的特定元素:
#find major group
listings = driver.find_element_by_id("new-listings");
#find subelement
checkbox = listings.find_element_by_class_name("listing-category")
Run Code Online (Sandbox Code Playgroud)
没关系,但我想使用 EC 来确保存在checkbox。我不能使用类似的东西:
checkbox = driver.wait.until(EC.presence_of_element_located(
(By.CLASS_NAME, "listing-category")))
Run Code Online (Sandbox Code Playgroud)
只是因为还有很多其他类似的listing-category元素。遗憾的是,唯一的定位方法checkbox是通过嵌套请求,如前面所示(它没有任何 id 或其他任何内容)。
如何正确表达呢?
额外的小问题:一般来说,使用 EC 而不是仅仅命中元素并希望它们已经可用,对性能是否非常不利?99% 的时间我不需要等待元素出现,所以我只是尝试处理浏览器响应速度比平常慢的罕见情况。但我不确定 EC 是否会因为创建事件处理程序等而引入大量开销。
抱歉,如果我提交了副本,但是我想知道python中是否有任何lib使您能够从音频文件中提取声谱。我希望能够获取音频文件并编写算法,该算法将返回一组数据{TimeStampInFile; 频率幅度}。
我听说这通常称为节拍检测,但是据我所知,节拍检测不是一种精确的方法,它仅对可视化有用,而我想对提取的数据进行处理,然后将其转换回音频文件。我不需要实时执行此操作。
我将不胜感激任何建议。
我目前正在尝试使用存储在我的pandas.dataframe中的数据进行一些k-means聚类(实际上是在其中一个列中).奇怪的是,不是将每一行视为一个单独的例子,它威胁所有行作为一个例子但是在非常高的维度.例如:
df = pd.read_csv('D:\\Apps\\DataSciense\\Kaggle Challenges\\Titanic\\Source Data\\train.csv', header = 0)
median_ages = np.zeros((2,3))
for i in range(0,2):
for j in range (0,3):
median_ages[i, j] =df[(df.Gender == i) &(df.Pclass == j+1)].Age.dropna().median()
df['AgeFill'] = df['Age']
for i in range(0, 2):
for j in range(0,3):
df.loc[ (df.Age.isnull()) & (df.Gender == i) & (df.Pclass == j+1), 'AgeFill'] = median_ages[i, j]
Run Code Online (Sandbox Code Playgroud)
然后我只是检查它看起来很好:
df.AgeFill
Name: AgeFill, Length: 891, dtype: float64
Run Code Online (Sandbox Code Playgroud)
看起来不错,891 float64号.我做骂人:
k_means = cluster.KMeans(n_clusters=1, init='random')
k_means.fit(df.AgeFill)
Run Code Online (Sandbox Code Playgroud)
我检查集群中心:
k_means.cluster_centers_
Run Code Online (Sandbox Code Playgroud)
它给我一个巨大的阵列.
此外:
k_means.labels_
Run Code Online (Sandbox Code Playgroud)
给我:
array([0])
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?为什么它认为我有一个891维度的例子,而不是891例子?
只是为了更好地说明,如果我尝试2个集群:
k_means …Run Code Online (Sandbox Code Playgroud) 我有以下问题.现在我正在构建一个分类器系统,它将使用文本和一些额外的补充信息作为输入.我在pandas DataFrame中存储了免费信息.我使用CountVectorizer转换文本并获得稀疏矩阵.现在,为了训练分类器,我需要将两个输入都放在同一个数据帧中.问题是,当我将数据帧与CountVectorizer的输出合并时,我得到一个密集矩阵,这意味着我的内存耗尽非常快.有没有办法避免它并将这2个输入正确地合并到单个数据帧中而不会得到密集矩阵?
示例代码:
import pandas as pd
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.feature_extraction.text import CountVectorizer
from sklearn import preprocessing
from sklearn.model_selection import train_test_split
#how many most popular words we consider
n_features = 5000
df = pd.DataFrame.from_csv('DataWithSentimentAndTopics.csv',index_col=None)
#vecotrizing text
tf_vectorizer = CountVectorizer(max_df=0.5, min_df=2,
max_features=n_features,
stop_words='english')
#getting the TF matrix
tf = tf_vectorizer.fit_transform(df['reviewText'])
df = pd.concat([df.drop(['reviewText', 'Summary'], axis=1), pd.DataFrame(tf.A)], axis=1)
#binning target variable into 4 bins.
df['helpful'] = pd.cut(df['helpful'],[-1,0,10,50,100000], labels = [0,1,2,3])
#creating X and Y variables
train = df.drop(['helpful'], axis=1)
Y …Run Code Online (Sandbox Code Playgroud) 我使用 TensorFlow 后端与 keras 建立了一个网络。
当我训练我的网络时,我经常不断收到消息:
UserWarning: Method on_batch_end() is slow compared to the batch update (0.195523). Check your callbacks.
% delta_t_median)
Run Code Online (Sandbox Code Playgroud)
问题是我的网络只设置了检查点回调:
checkpoint = ModelCheckpoint(filepath, monitor='val_loss', verbose=1, save_best_only=True, mode='min')
callbacks_list = [checkpoint]
Run Code Online (Sandbox Code Playgroud)
据我在文档中看到的这个方法只在纪元结束时被调用,所以它不能减慢on_batch_end方法的速度。任何人都可以提供一些有关问题的信息吗?
所以我已经安装了带有python 2.7的anaconda并安装了Caffe库的所有要求.我确保安装了opencv
import cv2
Run Code Online (Sandbox Code Playgroud)
并检查我可以从文档中运行几个示例.
现在我下载caffe,正确配置makefile.config并运行make all.我得到了非常奇怪的错误:
make
CXX/LD -o .build_release/tools/upgrade_net_proto_text.bin
/usr/bin/ld: warning: libpng16.so.16, needed by /home/maxkhk/anaconda/lib/libopencv_highgui.so, not found (try using -rpath or -rpath-link)
/home/maxkhk/anaconda/lib/libopencv_highgui.so: undefined reference to `png_create_read_struct@PNG16_0'
/home/maxkhk/anaconda/lib/libopencv_highgui.so: undefined reference to `png_set_interlace_handling@PNG16_0'
/home/maxkhk/anaconda/lib/libopencv_highgui.so: undefined reference to `png_set_IHDR@PNG16_0'
/home/maxkhk/anaconda/lib/libopencv_highgui.so: undefined reference to `png_get_io_ptr@PNG16_0'
/home/maxkhk/anaconda/lib/libopencv_highgui.so: undefined reference to `png_set_longjmp_fn@PNG16_0'
/home/maxkhk/anaconda/lib/libopencv_highgui.so: undefined reference to `png_set_gray_to_rgb@PNG16_0'
/home/maxkhk/anaconda/lib/libopencv_highgui.so: undefined reference to `png_set_compression_level@PNG16_0'
/home/maxkhk/anaconda/lib/libopencv_highgui.so: undefined reference to `png_set_bgr@PNG16_0'
/home/maxkhk/anaconda/lib/libopencv_highgui.so: undefined reference to `png_set_filter@PNG16_0'
/home/maxkhk/anaconda/lib/libopencv_highgui.so: undefined reference to `png_set_rgb_to_gray@PNG16_0'
/home/maxkhk/anaconda/lib/libopencv_highgui.so: undefined reference to `png_init_io@PNG16_0'
/home/maxkhk/anaconda/lib/libopencv_highgui.so: …Run Code Online (Sandbox Code Playgroud) 我有一个带有一列连续变量的熊猫数据框。我需要将它们转换为 3 个 bin,这样第一个 bin 包含 <20% 的值,第二个包含 20 到 80% 之间的值,最后一个包含 >80% 的值。
我试图通过首先获取此类百分位数的 bin 边界,然后使用 pandas cut 函数来实现它。问题是我得到了一个奇怪的结果,只得到了中间的 bin 编码。请参阅以下内容:
test = [x for x in range(0,100)]
a = pd.DataFrame(test)
np.percentile(a, [20, 80])
Out[52]: array([ 19.8, 79.2])
pd.cut(a[0], np.percentile(a[0], [20, 80]))
...
15 NaN
16 NaN
17 NaN
18 NaN
19 NaN
20 (19.8, 79.2]
21 (19.8, 79.2]
22 (19.8, 79.2]
...
78 (19.8, 79.2]
79 (19.8, 79.2]
80 NaN
Run Code Online (Sandbox Code Playgroud)
为什么呢?我虽然 pandas cut 要求您提供您想要获得的垃圾箱的边界。提供 2 个边界我应该得到 3 个垃圾箱,但似乎不能这样工作。
python ×8
scikit-learn ×4
tensorflow ×4
dataframe ×3
pandas ×3
regularized ×2
anaconda ×1
audio ×1
caffe ×1
callback ×1
data-science ×1
keras ×1
opencv ×1
r ×1
selenium ×1
ubuntu ×1
webdriver ×1